macOS Dirty NIB

Support HackTricks

For further detail about the technique check the original post from: https://blog.xpnsec.com/dirtynib/ and the following post by https://sector7.computest.nl/post/2024-04-bringing-process-injection-into-view-exploiting-all-macos-apps-using-nib-files/. Here is a summary:

What are Nib files

Nib(NeXT Interface Builderの略)ファイルは、Appleの開発エコシステムの一部であり、アプリケーション内のUI要素とその相互作用を定義するために使用されます。これらはウィンドウやボタンなどのシリアライズされたオブジェクトを含み、ランタイムで読み込まれます。現在も使用されていますが、Appleはより包括的なUIフローの視覚化のためにStoryboardを推奨しています。

主要なNibファイルは、アプリケーションのInfo.plistファイル内の値**NSMainNibFileで参照され、アプリケーションのmain関数で実行されるNSApplicationMain**関数によって読み込まれます。

Dirty Nib Injection Process

Creating and Setting Up a NIB File

  1. Initial Setup:

  • XCodeを使用して新しいNIBファイルを作成します。

  • インターフェースにオブジェクトを追加し、そのクラスをNSAppleScriptに設定します。

  • ユーザー定義のランタイム属性を介して初期sourceプロパティを構成します。

  1. Code Execution Gadget:

  • この設定により、必要に応じてAppleScriptを実行できます。

  • Apple Scriptオブジェクトをアクティブにするボタンを統合し、特にexecuteAndReturnError:セレクタをトリガーします。

  1. Testing:

  • テスト用のシンプルなApple Script:

set theDialogText to "PWND"
display dialog theDialogText
  • XCodeデバッガーで実行し、ボタンをクリックしてテストします。

Targeting an Application (Example: Pages)

  1. Preparation:

  • ターゲットアプリ(例:Pages)を別のディレクトリ(例:/tmp/)にコピーします。

  • Gatekeeperの問題を回避し、アプリをキャッシュするためにアプリを起動します。

  1. Overwriting NIB File:

  • 既存のNIBファイル(例:About Panel NIB)を作成したDirtyNIBファイルで置き換えます。

  1. Execution:

  • アプリと対話して実行をトリガーします(例:Aboutメニュー項目を選択)。

Proof of Concept: Accessing User Data

  • ユーザーの同意なしに、AppleScriptを修正してユーザーデータ(写真など)にアクセスし、抽出します。

Code Sample: Malicious .xib File

Other Example

投稿https://sector7.computest.nl/post/2024-04-bringing-process-injection-into-view-exploiting-all-macos-apps-using-nib-files/では、ダーティニブの作成方法に関するチュートリアルを見つけることができます。

Addressing Launch Constraints

  • Launch Constraintsは、予期しない場所(例:/tmp)からのアプリの実行を妨げます。

  • Launch Constraintsによって保護されていないアプリを特定し、NIBファイルの注入をターゲットにすることが可能です。

Additional macOS Protections

macOS Sonoma以降、アプリバンドル内の変更が制限されています。ただし、以前の方法は次のように行われました:

  1. アプリを別の場所(例:/tmp/)にコピーします。

  2. 初期の保護を回避するために、アプリバンドル内のディレクトリの名前を変更します。

  3. Gatekeeperに登録するためにアプリを実行した後、アプリバンドルを変更します(例:MainMenu.nibをDirty.nibに置き換えます)。

  4. ディレクトリの名前を元に戻し、アプリを再実行して注入されたNIBファイルを実行します。

Note: 最近のmacOSのアップデートにより、Gatekeeperキャッシュ後にアプリバンドル内のファイルの変更が防止され、この脆弱性は無効化されました。

Support HackTricks

Last updated