Oracle-Outside-In

MS13-105: Zraniteľnosť v parsovaní MDB súboru s Oracle Outside In – CVE-2013-5791

Ľudia sa niekedy zamýšlajú, ako je možné vedieť presnú zraniteľnosť opravenú v uzavretom kóde. V tomto blogu by sme vám to radi ukázali na príklade z Microsoft security bulletinu. V decembri 2013 vydal Microsoft opravu MS13-105 [1] na Microsoft Exchange Server, ktorá používa knižnice Oracle Outside In. Samotný Oracle vydal záplatu v októbri 2013.[2]

Zraniteľnosť sa nachádza v knižnici vsacs.dll, ktorú používa viacero produktov (Microsoft Exchange, Novell Groupwise, Oracle Fusion Middleware, IBM WebSphere Portal, atď..) a nastáva pri čítaní mena stĺpca v súbore Microsoft Access 1.x. String z haldy sa kopíruje do zásobníku vyrovnávacej pamäti s fixnou veľkosťou bez kontroly toho, že cieľový buffer je dosť veľký na uloženie stringu. Výsledkom je pretečenie zásobníku.

Analýza záplaty

CVE: CVE-2013-5791 [3]

Pred záplatou : vsacs.dll 8.3.7.0.1106281647 Po záplate : vsacs.dll 8.4.1.52.1309170927

Zaujímavá (zraniteľná) časť kódu (Imagebase: 10000000):

10002A4B                 movzx   cx, byte ptr [eax+3875h]
10002A53                 movzx   dx, byte ptr [eax+3874h]
10002A5B                 shl     cx, 8
10002A5F                 add     cx, dx          ; veľkosť (kontrolované užívateľom)
10002A62                 sub     cx, 1Ah         ; veľkosť = veľkosť - 0x1A (26)
10002A66                 movzx   edx, cx
10002A69                 xor     ebx, ebx
10002A6B                 cmp     dx, bp          ; veľkosť musí byť väčšia ako 0
10002A6E                 jle     short loc_10002A94
10002A70                 movzx   ebp, dx
10002A73                 lea     edi, [esp+78h+var_40] ; cieľ (zásobník)
10002A77                 lea     ecx, [eax+3889h] ; zdroj (meno stĺpca)
10002A7D                 movzx   ebx, bp
10002A80
10002A80 loc_10002A80:                           ; CODE XREF: sub_100028C0+1D2
10002A80                 mov     dl, [ecx]
10002A82                 add     word ptr [esi+24h], 1
10002A87                 mov     [edi], dl       ; <-- Výnimka, pretečenie zásobníku
10002A89                 add     ecx, 1
10002A8C                 add     edi, 1
10002A8F                 sub     ebp, 1
10002A92                 jnz     short loc_10002A80

Po záplate (Imagebase: 10000000):

10002E82                 movzx   ax, byte ptr [edx+esi+3875h]
10002E8B                 movzx   cx, byte ptr [edx+esi+3874h]
10002E94                 lea     edi, [edx+esi]
10002E97                 shl     ax, 8
10002E9B                 add     ax, cx          ; veľkosť (kontrolované užívateľom)
10002E9E                 sub     ax, 1Ah         ; veľkosť = veľkosť - 0x1A (26)
10002EA2                 movzx   ebp, ax
10002EA5                 cmp     bp, 28h         ; <-- pridaná kontrola (najväčšia veľkosť je 0x28 (40))
10002EA9                 jle     short loc_10002EC6
10002EAB                 mov     edx, [esi+4450h]
10002EB1                 mov     eax, [esi+444Ch]
10002EB7                 mov     ecx, [esi+4278h]
10002EBD                 push    edx
10002EBE                 push    eax
10002EBF                 push    9
10002EC1                 call    ecx             ; sccut.UTBailOutEx
10002EC3                 add     esp, 0Ch
10002EC6
10002EC6 loc_10002EC6:                           ; CODE XREF: sub_10002C90+219
10002EC6                 xor     edx, edx
10002EC8                 test    bp, bp          ; veľkosť musí byť väčšia ako 0
10002ECB                 jle     short loc_10002EF4
10002ECD                 movzx   ebp, bp
10002ED0                 lea     ecx, [esp+80h+var_40] ; cieľ (zásobník)
10002ED4                 lea     eax, [edi+3889h] ; zdroj (meno stĺpca)
10002EDA                 movzx   edx, bp
10002EDD                 lea     ecx, [ecx+0]
10002EE0
10002EE0 loc_10002EE0:                           ; CODE XREF: sub_10002C90+262
10002EE0                 mov     bl, [eax]
10002EE2                 add     word ptr [esi+24h], 1
10002EE7                 mov     [ecx], bl
10002EE9                 add     eax, 1
10002EEC                 add     ecx, 1
10002EEF                 sub     ebp, 1
10002EF2                 jnz     short loc_10002EE0

Ako môžete vidieť, záplata pridala kontrolu veľkosťi, aby predišla pretečeniu zásobníku.

Windbg Crash Log

(9d8.f58): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=0408b8ce ebx=00004127 ecx=040901f3 edx=00004104 esi=0408b580 edi=00290000
eip=62502a87 esp=0028ef2c ebp=0000308b iopl=0         nv up ei pl nz na po nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00210202
vsacs!VwStreamTell+0xd57:
62502a87 8817            mov     byte ptr [edi],dl          ds:002b:00290000=41

Výnimka nastala počas spracovania PoC súboru [4] s nezaplátanou verziou knižnice Oracle Outside In.

Veselé exploitovanie v roku 2014!

Zdroje:

  1. https://technet.microsoft.com/en-us/security/bulletin/ms13-105
  2. http://www.oracle.com/technetwork/topics/security/cpuoct2013-1899837.html
  3. http://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2013-5791
  4. http://cms.int.citadelo.com/download/CVE-2013-5791.MDB

O autorovi

Citadelo
Citadelo je dom plný etických hackerov na vašej strane. Pomáhame otestovať ich informačnú bezpečnosť. Podrobte svoje IT prostredie výzve a odhaľte, do akej miery sú vaše citlivé dáta chránené.
Zobraziť viac od autora

Podobné blogy

Citadelo Security Evening - jar 2018

blog | | Michaela Gallee
Bizarné úniky firemných dát alebo ako si uchovať svoju virtuálnu peňaženku alebo ako sa uchrániť pred fenoménom "Black Swan". To sú témy prednášok, ktoré odzneli na Citadelo Security Evening (CSE), ktorý sa konal vo štvrtok 26.4.2018 u nás v Citadelo.
Zobraziť

Počítačová kriminalita – sme často obeťami hackerských útokov?

blog |
Už dávno neplatí, že v ohrození sú len medzinárodné spoločnosti alebo tí, čo disponujú hodnotným majetkom. Zločinci si pri útoku cez internet len málokedy vyberajú jednotlivcov - ich terčom sú masy.
Zobraziť

Bezpečnosť na internete - Viete sa správať v online priestore bezpečne?

blog |
Priemerný človek strávi na internete každý deň 3 hodiny a 20 minút. Okrem užitočných informácií a zábavy ale na nás čaká v online svete aj veľké množstvo hrozieb.
Zobraziť

Citadelo na novom a ešte bezpečnejšom webe

Blog | | Michaela Gallee
Naša požiadavka na bezpečný web sa môže niekomu zdať prehnaná, nie sme predsa svetová banka. To však nič nemení na tom, že našou víziou je bezpečný internet a preto naša priorita bola kladená na bezpečnosť.
Zobraziť