macOS FS Tricks
Комбінації дозволів POSIX
Дозволи в каталозі:
читання - ви можете перелічити записи каталогу
запис - ви можете видаляти/записувати файли в каталозі та видаляти порожні папки.
Але ви не можете видаляти/змінювати непорожні папки, якщо у вас немає дозволів на запис до них.
Ви не можете змінювати назву папки, якщо ви не є її власником.
виконання - вам дозволено переходити в каталог - якщо у вас немає цього права, ви не зможете отримати доступ до будь-яких файлів всередині нього або в будь-яких підкаталогах.
Небезпечні комбінації
Як перезаписати файл/папку, яка належить root, але:
Один батьківський власник каталогу в шляху - користувач
Один батьківський власник каталогу в шляху - група користувачів з доступом на запис
Група користувачів має доступ на запис до файлу
З будь-якою з попередніх комбінацій атакувальник може впровадити символьне/жорстке посилання на очікуваний шлях, щоб отримати привілейоване довільне записування.
Випадок спеціального доступу R+X для кореня каталогу
Якщо є файли в каталозі, де тільки root має доступ R+X, вони недоступні для будь-кого іншого. Тому вразливість, яка дозволяє перемістити файл, доступний для читання користувачем, який не може читати через це обмеження, з цього каталогу в інший, може бути використана для читання цих файлів.
Символьне посилання / Жорстке посилання
Якщо привілейований процес записує дані в файл, який може бути контрольований менш привілейованим користувачем або який може бути раніше створений менш привілейованим користувачем. Користувач може просто вказати на інший файл через символьне або жорстке посилання, і привілейований процес буде записувати в цей файл.
Перевірте інші розділи, де атакувальник може використовувати довільне записування для підвищення привілеїв.
.fileloc
Файли з розширенням .fileloc
можуть вказувати на інші програми або бінарні файли, тому коли вони відкриваються, виконуватиметься ця програма/бінарний файл.
Приклад:
Довільний FD
Якщо ви можете змусити процес відкрити файл або папку з високими привілеями, ви можете зловживати crontab
, щоб відкрити файл у /etc/sudoers.d
з EDITOR=exploit.py
, тоді exploit.py
отримає FD до файлу всередині /etc/sudoers
і зловживає ним.
Наприклад: https://youtu.be/f1HA5QhLQ7Y?t=21098
Уникайте трюків з атрибутами xattrs карантину
Видаліть це
Прапорець uchg / uchange / uimmutable
Якщо у файлу/папці встановлено цей незмінний атрибут, то неможливо буде додати до нього xattr.
Монтування defvfs
Монтування devfs не підтримує xattr, додаткова інформація в CVE-2023-32364
writeextattr ACL
Цей ACL запобігає додаванню xattrs
до файлу
com.apple.acl.text xattr + AppleDouble
Формат файлу AppleDouble копіює файл разом з його ACEs.
У вихідному коді можна побачити, що текстове представлення ACL, збережене всередині xattr під назвою com.apple.acl.text
, буде встановлено як ACL у розпакованому файлі. Таким чином, якщо ви стиснули додаток у zip-файл з форматом файлу AppleDouble з ACL, яке перешкоджає запису інших xattr до нього... xattr карантину не було встановлено у додаток:
Перевірте оригінальний звіт для отримання додаткової інформації.
Для реплікації цього спочатку нам потрібно отримати правильний рядок acl:
(Зверніть увагу, що навіть якщо це працює, після цього пісочниця записує атрибут quarantine)
Не зовсім потрібно, але я залишаю це тут на всякий випадок:
pagemacOS xattr-acls extra stuffОбхід підписів коду
Пакунки містять файл _CodeSignature/CodeResources
, який містить хеш кожного окремого файлу у пакунку. Зверніть увагу, що хеш CodeResources також вбудований у виконуваний файл, тому ми не можемо з цим порушувати.
Однак є деякі файли, підпис яких не буде перевірений, вони мають ключ omit у plist, наприклад:
Можливо обчислити підпис ресурсу з командного рядка за допомогою:
Зазвичай macOS монтує диск, спілкуючись з службою Mach com.apple.DiskArbitrarion.diskarbitrariond
(наданою /usr/libexec/diskarbitrationd
). Якщо додати параметр -d
до файлу LaunchDaemons plist та перезапустити його, він буде зберігати журнали в /var/log/diskarbitrationd.log
.
Однак можна використовувати інструменти, такі як hdik
та hdiutil
, щоб спілкуватися безпосередньо з com.apple.driver.DiskImages
kext.
Довільні записи
Періодичні sh-сценарії
Якщо ваш сценарій можна розглядати як shell-сценарій, ви можете перезаписати /etc/periodic/daily/999.local
shell-сценарій, який буде запускатися щодня.
Ви можете підробити виконання цього сценарію за допомогою: sudo periodic daily
Демони
Запишіть довільний LaunchDaemon, наприклад /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
з plist, що виконує довільний сценарій, наприклад:
Просто створіть сценарій /Applications/Scripts/privesc.sh
з командами, які ви хочете виконати як root.
Файл Sudoers
Якщо у вас є довільна можливість запису, ви можете створити файл всередині папки /etc/sudoers.d/
, що надасть вам sudo привілеї.
Файли шляхів
Файл /etc/paths
є одним з основних місць, які заповнюють змінну середовища PATH. Вам потрібно мати права root для його перезапису, але якщо сценарій з привілейованим процесом виконує деяку команду без повного шляху, ви можете перехопити його, змінивши цей файл.
Ви також можете записувати файли в /etc/paths.d
, щоб завантажувати нові теки в змінну середовища PATH
.
Створення записуваних файлів від інших користувачів
Це створить файл, який належить користувачу root і доступний для запису мені (код звідси). Це також може працювати як підвищення привілеїв:
Посилання
Last updated