Sploitus

Exploit for CVE-2021-4034

kitploit Β· 2026-08-23

Exploit Code

MARKDOWN36 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-NICOIBARBURU-CVE-2021-4034
# ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ (Proof of Concept): CVE-2021-4034 (PwnKit)

**ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅:** Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΈ Π΅Π³ΠΎ содСрТимоС ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ Π΄ΠΈΠΏΠ»ΠΎΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° (GrAL), созданного ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… цСлях ΠΈ для акадСмичСских исслСдований.

## ОписаниС

Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ содСрТит ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ (PoC β€” Proof of Concept) для уязвимости **CVE-2021-4034** (Ρ‚Π°ΠΊΠΆΠ΅ извСстной ΠΊΠ°ΠΊ PwnKit). Π­Ρ‚Π° ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ поврСТдСния памяти Π·Π°Ρ‚Ρ€Π°Π³ΠΈΠ²Π°Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ `pkexec` ΠΈΠ· Polkit Π² Linux-систСмах. ΠŸΡ€ΠΈ запускС `pkexec` с пустым списком Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (`argc == 0`) ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ окруТСния ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΎΠ±Ρ‰Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ добиваясь локального ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ.

## Π­Ρ‚Π°ΠΏΡ‹ эксплуатации (Анализ окруТСния)

НиТС описаны шаги, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ для ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠΈ срСды выполнСния с Ρ†Π΅Π»ΡŒΡŽ эксплуатации этой ошибки. Π­Ρ‚ΠΎΡ‚ процСсс ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ошибка чтСния/записи памяти Π² `pkexec`:

### 1\. ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° окруТСния (структура `gconv`)

Π­Ρ‚ΠΎΡ‚ эксплойт злоупотрСбляСт Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ GLib ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ символов ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ вывСсти сообщСниС ΠΎΠ± ошибкС. Для этого ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ шагом являСтся созданиС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ структуры ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠ², которая Π±ΡƒΠ΄Π΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ для GLib Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ прСобразования GCONV.

### 2\. ΠœΠ°Π½ΠΈΠΏΡƒΠ»ΡΡ†ΠΈΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ окруТСния

ΠšΠ»ΡŽΡ‡ ΠΊ уязвимости β€” Π²Π½Π΅Π΄Ρ€Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ окруТСния `GCONV_PATH` с использованиСм записи Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива, Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ состояниСм `argc == 0` Π² `pkexec`. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° принуТдаСтся ΠΊ использованию аномальной ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ символов, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ GLib Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ поиска ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ прСобразования символов Π² ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅, созданном Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ шагС.

### 3\. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ врСдоносной ΠΎΠ±Ρ‰Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (`.so`)

Для выполнСния нашСго ΠΊΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ (shared object ΠΈΠ»ΠΈ `.so`). Когда `pkexec` попытаСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΡƒ символов, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ смоТСт Π½Π°ΠΉΡ‚ΠΈ, ΠΎΠ½ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈΠ· нашСго поддСльного ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° `gconv`. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ `pkexec` являСтся Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΎΠΌ с установлСнным SUID-Π±ΠΈΡ‚ΠΎΠΌ (ΠΎΠ½ выполняСтся ΠΎΡ‚ ΠΈΠΌΠ΅Π½ΠΈ root), ΠΏΡ€ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ΅ этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ наш ΠΊΠΎΠ΄ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ root-ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ² ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ систСмой (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ΠΊΡ€Ρ‹Π² root-ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΡƒ).

### 4\. ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ Ρ„Π°ΠΉΠ»Π° `gconv-modules`

НаконСц, Π² этом локальном ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» `gconv-modules`. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» дСйствуСт ΠΊΠ°ΠΊ индСкс: ΠΎΠ½ сообщаСт GLib, ΠΊΠ°ΠΊΡƒΡŽ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ (`.so`) Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ для прСобразования Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½ΠΎΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ символов. Π­Ρ‚ΠΎΡ‚ Ρ„Π°ΠΉΠ» связываСт ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅ΠΌΠΎΠ΅ `pkexec`, с ΠΎΠ±Ρ‰Π΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ, созданной Π½Π° шагС 3.

## ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ ΠΈ очистка

Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ Π΅ΡΡ‚ΡŒ `Makefile` для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ компиляции C-Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠ° ΠΈ очистки окруТСния.

  * **Для компиляции ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:** $ make

  * **Для очистки созданных Ρ„Π°ΠΉΠ»ΠΎΠ² (Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΏΠ°ΠΏΠΎΠΊ ΠΈ Π±ΠΈΠ½Π°Ρ€Π½ΠΈΠΊΠΎΠ²):** $ make clean