
Spanische Übersetzung der CVE-2022-1015 und 1016, entdeckt und dokumentiert von David.
Diese README.md ist eine Übersetzung von Davids Blog. David fand die CVE-1015 und CVE-1016 im Linux-Kernel. Du kannst seine Webseite besuchen, um das Originaldokument zu lesen.
Hier sind seine Social-Media-Profile:
Veröffentlicht am 2. April 2022.
Diese Probleme sollten in den Standardkonfigurationen der neuesten Version von Ubuntu und von RHEL ausnutzbar sein. Ich schrieb meinen Proof-of-Concept (PoC) für CVE-2022-1015 mit Zielkernelversion 5.16-rc3 von Arch Linux.
Dieses Dokument richtet sich an Personen mit grundlegenden Kenntnissen des Linux-Kernels in Bezug auf Funktionalität und Sicherheit. Ich habe versucht, dieses Dokument für Personen ohne Kenntnisse des Netzwerk-Stacks zugänglich zu machen, um es für ein breites Publikum verständlich zu halten.
Hier ist eine Leseanleitung:
Mitte Februar kündigte das Google-Sicherheitsprogramm an, dass sie ihr kCTF-Belohnungsprogramm fortsetzen würden, mit Belohnungen von $31,337 bis $91,337 für einen Exploit im Linux-Kernel, der Privilegien auf den Root-Benutzer von nicht privilegierten Prozessen in einer nsjail-Sandbox eskaliert.
Als armer Student hat das natürlich meine Aufmerksamkeit erregt. Es war mein erstes Mal, dass ich nach einer „echten" Schwachstelle suchte, aber durch meine Abenteuer beim Spielen von CTF mit meinem Team bin ich mit dem Linux-Kernel in Bezug auf Sicherheit vertraut geworden.
Nach Stunden und Stunden mit kaum Fortschritt (aber mit mehr Wissen über Linux) gelang es mir, einige Schwachstellen im Modul nf_tables zu finden.
Leider stellte ich am Ende fest, dass dieses Modul in den Regeln des Google kCTF nicht vorhanden war (daher erhielt ich keine Belohnung für diese beiden Schwachstellen). Aber natürlich meldete ich sie trotzdem und schrieb einen LPE-Exploit (Local Privilege Escalation) für CVE-2022-1015.
Nun gut, du hast also beschlossen, einige Schwachstellen in Linux zu finden. Was nun? Linux ist ein riesiges Projekt, und es ist leicht, den Wald vor lauter Bäumen nicht zu sehen (du konzentrierst dich so sehr auf die Details, dass du den Überblick über das verlierst, was wirklich wichtig ist, du hast keinen Gesamtüberblick). Um die Sache noch schlimmer zu machen, sind viele Teile nicht dokumentiert und du musst eine Menge Code lesen, um zu verstehen, was vor sich geht.
Ich begann damit, eine detaillierte Perspektive auf das Linux-Sicherheitsmodell zu bekommen. Einen Bug zu finden ist eine Sache; aber einen guten Bug zu finden ist eine ganz andere. Schließlich sind nicht alle Bugs gleich geschaffen:
FS_USERNS_MOUNT spezifiziert, in diesem Fall kannst du sie im user namespace mounten.CAP_SYS_ADMIN oder CAP_NET_ADMIN.
/proc/config.gz abgerufen werden. Module können als (=m) geladen oder separat kompiliert und zur Laufzeit geladen werden (=y)./proc/modules und /proc/kallsyms verwenden, aber sie sind nicht immer zuverlässig, da Module dynamisch in den Kernel geladen werden können (z. B. request_module).Diese Einschränkungen helfen uns, die Grenzen der Dateisysteme zu verstehen, in denen wir nach Schwachstellen suchen können. Ich denke, es ist eine gute Idee, sich Zeit zu nehmen, um deinen Angriff auf das gewünschte Ziel zu planen.
Ich habe meine Lektion aus dem obigen Punkt gelernt. Wie erwähnt, war das Modul nf_tables in der von kCTF präsentierten Instanz nicht geladen. Ich hätte das von Anfang an bemerken und mir die Enttäuschung ersparen können :p. Andererseits würdest du diesen Blog jetzt wahrscheinlich nicht lesen, wenn ich es bemerkt hätte, ich schätze, die Dinge sind am Ende doch gut gelaufen.
Eine Erklärung, warum COS, Googles container-optimierter Linux-Fork, kein nf_tables hatte, findet sich hier und hier.
Nachdem ich die oben genannten Punkte bewertet hatte, entschied ich, dass mein bester Weg zum Start wahrscheinlich wäre, mir den Quellcode des Netzwerks anzusehen. Viele der interessanten Funktionen dort erfordern CAP_NET_ADMIN, aber wie erwähnt, ist das eigentlich kein Problem. Im Gegenteil, ich vermute, dass Komponenten, die spezielle Fähigkeiten erfordern, im Allgemeinen weniger sicher sind, da die Kernel-Entwickler möglicherweise ein falsches Sicherheitsgefühl haben.
Ich habe mich auch bemüht, das Dateisystem auszuwählen, über das ich mehr erfahren wollte; auf diese Weise, selbst wenn du keinen Fehler findest, wirst du trotzdem eine Menge interessanter Dinge lernen.