53 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# macOS Office Sandbox Bypasses
{{#include ../../../../../banners/hacktricks-training.md}}
### Word Sandbox обход через Launch Agents
Застосунок використовує **кастомний Sandbox** з правом **`com.apple.security.temporary-exception.sbpl`**, і цей кастомний пісочниця дозволяє записувати файли будь-де, якщо ім'я файлу починається з `~$`: `(require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))`
Отже, втеча була такою ж легкою, як **створення `plist`** LaunchAgent у `~/Library/LaunchAgents/~$escape.plist`.
Перевірте [**оригінальний звіт тут**](https://www.mdsec.co.uk/2018/08/escaping-the-sandbox-microsoft-office-on-macos/).
### Word Sandbox обход через Login Items і zip
Пам'ятайте, що з першої втечі Word може записувати довільні файли, ім'я яких починається з `~$`, хоча після виправлення попередньої уразливості не було можливості записувати в `/Library/Application Scripts` або в `/Library/LaunchAgents`.
Було виявлено, що зсередини пісочниці можливо створити **Login Item** (додатки, які виконуються, коли користувач входить в систему). Однак ці додатки **не виконуватимуться, якщо** вони **не сертифіковані** і **неможливо додати аргументи** (тому ви не можете просто запустити зворотний шелл, використовуючи **`bash`**).
Після попереднього обходу Sandbox Microsoft вимкнув можливість записувати файли в `~/Library/LaunchAgents`. Однак було виявлено, що якщо ви помістите **zip-файл як Login Item**, `Archive Utility` просто **розпакує** його в його поточному місці. Тому, оскільки за замовчуванням папка `LaunchAgents` з `~/Library` не створюється, було можливим **запакувати plist у `LaunchAgents/~$escape.plist`** і **помістити** zip-файл у **`~/Library`**, щоб при розпакуванні він досягнув місця збереження.
Перевірте [**оригінальний звіт тут**](https://objective-see.org/blog/blog_0x4B.html).
### Word Sandbox обход через Login Items і .zshenv
(Пам'ятайте, що з першої втечі Word може записувати довільні файли, ім'я яких починається з `~$`).
Однак попередня техніка мала обмеження: якщо папка **`~/Library/LaunchAgents`** існує, тому що інше програмне забезпечення створило її, це призведе до збою. Тому для цього було виявлено інший ланцюг Login Items.
Зловмисник міг створити файли **`.bash_profile`** і **`.zshenv`** з корисним навантаженням для виконання, а потім запакувати їх і **записати zip у папку користувача жертви**: **`~/~$escape.zip`**.
Потім додати zip-файл до **Login Items** і потім до **додатка `Terminal`**. Коли користувач повторно входить в систему, zip-файл буде розпакований у файлі користувача, перезаписуючи **`.bash_profile`** і **`.zshenv`**, і, отже, термінал виконає один з цих файлів (в залежності від того, чи використовується bash або zsh).
Перевірте [**оригінальний звіт тут**](https://desi-jarvis.medium.com/office365-macos-sandbox-escape-fcce4fa4123c).
### Word Sandbox обход з Open і змінними середовища
З пісочницьких процесів все ще можливо викликати інші процеси, використовуючи утиліту **`open`**. Більше того, ці процеси будуть виконуватися **в межах їх власної пісочниці**.
Було виявлено, що утиліта open має опцію **`--env`** для запуску програми з **конкретними змінними середовища**. Отже, було можливим створити **файл `.zshenv`** в папці **всередині** **пісочниці** і використовувати `open` з `--env`, встановлюючи **змінну `HOME`** на цю папку, відкриваючи додаток `Terminal`, який виконає файл `.zshenv` (з якоїсь причини також було потрібно встановити змінну `__OSINSTALL_ENVIROMENT`).
Перевірте [**оригінальний звіт тут**](https://perception-point.io/blog/technical-analysis-of-cve-2021-30864/).
### Word Sandbox обход з Open і stdin
Утиліта **`open`** також підтримувала параметр **`--stdin`** (і після попереднього обходу більше не було можливості використовувати `--env`).
Суть у тому, що навіть якщо **`python`** був підписаний Apple, він **не виконає** скрипт з атрибутом **`quarantine`**. Однак було можливим передати йому скрипт з stdin, тому він не перевірить, чи був він під карантином чи ні:
1. Скиньте файл **`~$exploit.py`** з довільними командами Python.
2. Запустіть _open_ **`stdin='~$exploit.py' -a Python`**, що запускає додаток Python з нашим скинутим файлом, що служить його стандартним введенням. Python із задоволенням виконує наш код, і оскільки це дочірній процес _launchd_, він не підпорядковується правилам пісочниці Word.
{{#include ../../../../../banners/hacktricks-training.md}}