[JDEV] Re: Account information storage, plaintext? ...AND JabberD password storage

Frank Seesink frank at mail.wvnet.edu
Tue Sep 16 08:50:29 CDT 2003


____________________________________________________________
3rd PARTY ACCOUNT INFORMATION STORED IN PLAINTEXT

Jamin W. Collins wrote:

> Does anyone else see it as a concern that the Jabber server (1.4.2
> release) and popular transports (aim-t, jit, msn-t, and yahoo-t) save
> user account information (user name and password) in plaintext for
> anyone with read access on the Jabber server to see?
> 
followed by "He said"..."She said"...

	All I can think is Luke Skywalker's wing commander in the original 
'Star Wars' movie..."Stay on target"... :-)

	I may be wrong, but this thread is slowly drifting towards another 
discussion on security, and if we're not careful, it will end up being 
another flame war and the original question and the point it was seeking 
will be lost.

	Jamin simply asked a question asking if anyone was concerned, 
specifically regarding the storage of username/password combos to OTHER 
systems like AIM, MSN, etc.

	Yes, Jamin, I am concerned.  I do not feel a sysadmin (one of many hats 
I wear) should have information about a users' usernames/passwords on 
remote systems, WHENEVER POSSIBLE.  <==NOTE THIS BEFORE RESPONDING.  Why 
should I know what my users' AIM/ICQ/MSN/Yahoo! account names and 
passwords are?  Do I have the right to know my users' bank account 
numbers?  Their ATM PINs?  I think not.

	In fact, I do not like sysadmins (myself included) knowing users' 
passwords on the systems _I_ manage.  But that's drifting off-topic, so 
let's hold that thought for a minute.

	As already voiced in this thread, the reasons for storing 3rd party 
usernames/passwords is due to the needs of transports to have that 
information in order to properly 'impersonate' a user on that 3rd party 
system.  But what is really meant is that the transports need to KNOW 
the actual usernames/passwords in order to plug those in when a user 
connects to said 3rd party system.

	As suggested, possibilities exist for doing reversible 
encryption/hashing so that said transports can, in fact, have access to 
actual usernames/passwords while at the same time protecting such 
information through basic obfuscation. (ooooh, BIG word)

	The next question along this line might be:  where does the 
implementation of such a feature, should it be desired, lie?  Does it 
require a change in any way to Jabber/XMPP that requires the 'designers' 
of the protocol?  If not, does it lie with the JabberD team?  (Remember, 
Rob Norris is the guy writing JabberD2, so BE NICE! :-) )  Or does it 
lie with the transport writers?  When you know the answer to this 
question, politely ask those responsible if there might be a way to have 
such a feature.  Or, as always with open source, grab some code and go 
crazy. :-)

____________________________________________________________
JABBERD PASSWORD STORAGE

	Now, returning to the drifting topic of sysadmins knowing passwords on 
their own systems, I would like to ask if anyone is concerned that 
JabberD itself stores ITS users' passwords in plaintext, because I for 
one AM.  I understand the argument that services like 
jabberd/apache/whatnot should be configured to run as a given user and 
only THAT user should have access to the files, so why do we need to 
encrypt/hash them?

	Well, let me ask a few questions:

1.  How does *nix (pick your flavor) store users' passwords?
2.  How does Windows NT/2K/XP store users' passwords?
3.  How does Apache store users' passwords?

Not ONE uses plaintext passwords, at least by default.  (Not even sure 
if you could, but that's another topic again).  *nix typically uses some 
form of encryption, if not outright subverting things more by using 
yppasswords, NISpasswords, etc.  Windows NT/2K/XP same thing.  Even 
Apache uses either DES crypt or MD5 hashes.

	And speaking of Apache, that's probably a good comparison to use. 
Apache offers things like basic HTTP authentication, which requires the 
user to send plaintext passwords across the wire, where Apache then does 
its hash and compares the hash against its stored password.  If as a 
webserver admin you fear plaintext passwords on the wire, you use SSL.

	Regarding Jabber/XMPP, the same holds true.  Rob, you mentioned in one 
post "Well, I think that plaintext passwords on the wire are more of an 
issue than plaintext passwords in the data store."  I'm afraid I have to 
side with Michael Brown's response.  Plaintext passwords on the wire are 
not as much of an issue as stored passwords on a system.  Michael Brown 
covers the points well.

	And in the case of JabberD, it too has clients sending passwords in 
plaintext, but that's ok, if only because you can subvert that by using 
SSL-only connections to the Jabber server.  And SSL is built into 
JabberD, so it's not like it's an add-on or something only a few people 
have.  However, the storage of passwords ON the Jabber server is still a 
concern.

	Might I suggest one possibility?  Again, for those reading this, please 
note Rob Norris is "the man" with regards to JabberD2 development, so be 
nice.  Would it be possible, Rob, to offer the option to the JabberD 
admin to store passwords using, say, MD5 hashes?  Passwords would still 
come from clients as they do now.  The only change required is how 
JabberD stores them and, if it's configured to use MD5, how it does the 
comparison; i.e.,

	(plaintext_sent = plaintext_stored)
vs.
	(MD5(plaintext_sent) = hash_stored)

As for the original transport question, reversible encryption might be 
an option (though again, not sure who needs to be buttered up in that 
regard).

	Personally, I would love to see NO 3rd party passwords stored on the 
server, but rather have the Jabber client send any 3rd party passwords 
whenever the client connects (this way the USER is responsible at the 
client side for securing that information, and jabber admins don't have 
culpability for compromises passwords of systems they do not manage). 
However, I understand that would require a fundamental change in the way 
Jabber works, if only because the user would be required to re-enter all 
that 3rd party information from EACH client PC they used, as opposed to 
having the Jabber server store it for them (a la rosters, etc.).

P.S.	Whatever the case, I thank all those involved for all the
	time/energy/effort they have put into Jabber, be it the original
	coders, the transport writers, Rob Norris for his rewrite of
	Jabberd2, and those writing here who help to flesh out a pretty
	wicked product, etc.  People who don't code do not realize just
	much how effort goes into these projects.  All I did was figure
	out how to build JabberD from source, complete with
	MU-Conference, JUD, XDB_SQL, etc., on Windows, and MAN talk
	about time flying.  Only because my wife was visiting her folks
	in Brazil for 6 weeks--and I don't have a life :-)--was I able
	to get just that minor task done.  (I'm sure part of it is
	because I suck as a programmer compared to those who do it all
	the time :-)).

	Thanks everyone, seriously.





More information about the JDev mailing list