Hello Patrick,

On Sep 15, 2009, at 9:51 , Patrick Ohly wrote:

When using HTTP as transport with a public SyncML server, attackers can send messages to the server while a sync runs. If they manage to do that
so that the server believes that the message came from the client it
wants to talk to, then the session could be hijacked or (more likely)
the server will get so confused that the sync fails.

What protection mechanism are in place to prevent this?

One thing you can do (as a server) is to request auth not only for the first message, but again for every subsequent one (by responding 200 in the SyncHdr status, and not 212 as usually done). Together with MD5 auth and https, I think this is waterproof, because in the non- interceptable SSL response you have the nonce you need to succeed with MD5 auth for the next message.

My understanding
is that servers create a random session ID and accept all messages
addressed to a URL which contains that session ID (Funambol: <RespURI>
http://my.funambol.com/sync;jsessionid=EBEB550AE4C588DE559F4253E3FCEC19.NODE01
</RespURI>; Synthesis: <RespURI>
http://www.synthesis.ch/sync2?sessionid=4561864950208023213
</RespURI>).

Yes - but this is not a security feature, only a session tracking thing.

So the session ID should be truly unpredictable, because the security of
the session depends on it, correct?

I don't think the session security should depend on that.

Does the Synthesis engine create the number itself?

Yes. It's created by juggling bits of current time with bits of the session's memory address. This is sufficient to make it unique for the session. It's not really unpredictable in the security sense of course (altough you'd need some detail knowledge of the server machine to guess the memory address).

There's also a SessionID inside the SyncHDR. It's a lot shorter
(Synthesis: <SessionID>68</SessionID>) and chosen by the client. Does
the Synthesis engine really do much with this value? How is it created
with libsynthesis as client?

This one is only intended to allow clients to detect messed up order of responses, i.e. to make sure it is not looking at a delayed response from a previous session and the like. The server just echoes the ID back in responses.

The client generates it by simply incrementing an internal 16 bit counter once per session. If I correctly remember, it's even requested by the standard that this ID be a incrementing count.

HTTPS is only partly a solution. It prevents reading the response
message during transmission, but unless strict client certificate
checking is enabled, injecting messages is still possible.

See above - when requesting auth for every message it is IMHO secure.

Best Regards,

Lukas Zeller (l...@synthesis.ch)
-
Synthesis AG, SyncML Solutions  & Sustainable Software Concepts
i...@synthesis.ch, http://www.synthesis.ch





_______________________________________________
os-libsynthesis mailing list
os-libsynthesis@synthesis.ch
http://lists.synthesis.ch/mailman/listinfo/os-libsynthesis

Reply via email to