Hi x2go users/developers,

while reviewing x2go I've encountered issues which scared hell out of me.
The client seems to perform zero input validation. A rough server can easily 
crash the client
and most likely execute arbitrary code.
For example x2goSession ONMainWindow::getSessionFromString ( const QString& 
string ), it is feed with input from the server.
---
    QStringList lst=string.split ( '|' );
    x2goSession s;
    s.agentPid=lst[0];
    s.sessionId=lst[1];
    s.display=lst[2];
    s.server=lst[3];
    s.status=lst[4];
    s.crTime=lst[5];
    s.cookie=lst[6];
    s.clientIp=lst[7];
    s.grPort=lst[8];
    s.sndPort=lst[9];
---
If a line from the server, does not enough "|" we end up with out-of-bound 
array access.
The source is full with such issues.

Finally I've also looked at the server.
In short, the 90's called, they want their setuid bugs back.
x2gosqlitewrapper.c just wrong, anyone can make it executing whatever binary he 
wants with higher privileges.

But it's not only the code that worries me.
On Windows the client executes per default sshd and x11. Both are listening on 
all available IP-Addresses.
You silently install a user "sshuser" on Windows, which has the password of the 
currently logged in Windows user and give
him a login shell.

I haven't seen such a trainwreck of software for a long time.
By installing it on my system you've successfully backdoor'ed my clients and 
the server.

Thanks,
//richard
_______________________________________________
X2Go-Dev mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/x2go-dev

Reply via email to