macOS Office Sandbox Bypasses
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
응용 프로그램은 com.apple.security.temporary-exception.sbpl
권한을 사용하여 커스텀 샌드박스를 사용하며, 이 커스텀 샌드박스는 파일 이름이 ~$
로 시작하는 한 어디에나 파일을 쓸 수 있도록 허용합니다: (require-any (require-all (vnode-type REGULAR-FILE) (regex #"(^|/)~$[^/]+$")))
따라서 탈출은 **~/Library/LaunchAgents/~$escape.plist
**에 plist
LaunchAgent를 작성하는 것만큼 쉬웠습니다.
원본 보고서 확인하기를 확인하세요.
첫 번째 탈출에서 Word는 이름이 ~$
로 시작하는 임의의 파일을 쓸 수 있지만, 이전 취약점의 패치 이후 /Library/Application Scripts
또는 /Library/LaunchAgents
에 쓸 수는 없었습니다.
샌드박스 내에서 로그인 항목(사용자가 로그인할 때 실행되는 앱)을 생성할 수 있다는 것이 발견되었습니다. 그러나 이러한 앱은 인증되지 않은 경우에는 실행되지 않습니다. 또한 인수 추가는 불가능합니다(따라서 **bash
**를 사용하여 리버스 셸을 실행할 수 없습니다).
이전 샌드박스 우회로 인해 Microsoft는 ~/Library/LaunchAgents
에 파일을 쓸 수 있는 옵션을 비활성화했습니다. 그러나 로그인 항목으로 zip 파일을 넣으면 Archive Utility
가 현재 위치에서 압축을 풀기만 합니다. 따라서 기본적으로 ~/Library
의 LaunchAgents
폴더가 생성되지 않기 때문에 **LaunchAgents/~$escape.plist
**에 plist를 압축하고 **~/Library
**에 zip 파일을 배치하면 압축 해제 시 지속성 목적지에 도달할 수 있었습니다.
원본 보고서 확인하기를 확인하세요.
(첫 번째 탈출에서 Word는 이름이 ~$
로 시작하는 임의의 파일을 쓸 수 있습니다).
그러나 이전 기술에는 제한이 있었습니다. ~/Library/LaunchAgents
폴더가 다른 소프트웨어에 의해 생성된 경우 실패할 수 있습니다. 그래서 이를 위한 다른 로그인 항목 체인이 발견되었습니다.
공격자는 .bash_profile
및 .zshenv
파일을 생성하여 실행할 페이로드를 넣고, 이를 압축한 후 희생자의 사용자 폴더에 **~/~$escape.zip
**로 작성할 수 있습니다.
그런 다음 zip 파일을 로그인 항목에 추가하고 Terminal
앱을 추가합니다. 사용자가 다시 로그인하면 zip 파일이 사용자의 파일에 압축 해제되어 .bash_profile
및 **.zshenv
**를 덮어쓰게 되며, 따라서 터미널은 이 파일 중 하나를 실행하게 됩니다(사용되는 셸에 따라 다름).
원본 보고서 확인하기를 확인하세요.
샌드박스된 프로세스에서 여전히 open
유틸리티를 사용하여 다른 프로세스를 호출할 수 있습니다. 게다가 이러한 프로세스는 자신의 샌드박스 내에서 실행됩니다.
open 유틸리티에는 특정 env 변수를 사용하여 앱을 실행하는 --env
옵션이 있다는 것이 발견되었습니다. 따라서 샌드박스 내의 폴더에 .zshenv
파일을 생성하고 open
을 사용하여 HOME
변수를 해당 폴더로 설정하여 Terminal
앱을 열면, 이 앱이 .zshenv
파일을 실행하게 됩니다(어떤 이유로 인해 __OSINSTALL_ENVIROMENT
변수를 설정해야 했습니다).
원본 보고서 확인하기를 확인하세요.
open
유틸리티는 --stdin
매개변수도 지원했습니다(이전 우회 이후 **--env
**를 사용할 수 없게 되었습니다).
문제는 **python
**이 Apple에 의해 서명되었더라도 quarantine
속성이 있는 스크립트를 실행하지 않습니다. 그러나 stdin에서 스크립트를 전달할 수 있었기 때문에, 격리 여부를 확인하지 않았습니다:
임의의 Python 명령이 포함된 ~$exploit.py
파일을 드롭합니다.
open **–stdin='~$exploit.py' -a Python
**을 실행하여 Python 앱을 실행하고, 드롭한 파일을 표준 입력으로 사용합니다. Python은 우리의 코드를 기꺼이 실행하며, 이는 _launchd_의 자식 프로세스이므로 Word의 샌드박스 규칙에 구속되지 않습니다.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)