Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1110 CNY

100%

CVE-2021-4034 PoC — polkit 缓冲区错误漏洞

Source
Associated Vulnerability
Title:polkit 缓冲区错误漏洞 (CVE-2021-4034)
Description:A local privilege escalation vulnerability was found on polkit's pkexec utility. The pkexec application is a setuid tool designed to allow unprivileged users to run commands as privileged users according predefined policies. The current version of pkexec doesn't handle the calling parameters count correctly and ends trying to execute environment variables as commands. An attacker can leverage this by crafting environment variables in such a way it'll induce pkexec to execute arbitrary code. When successfully executed the attack can cause a local privilege escalation given unprivileged users administrative rights on the target machine.
Description
CVE-2021-4034: Local Privilege Escalation in polkit's pkexec proof of concept
Readme
CVE-2021-4034 Proof of Concept
==============================

Qualys researches found a pretty cool local privilege escalation vulnerability
in Polkit's `pkexec`: [writeup][qualys-wup], [tweet][qualys-tweet]. This vuln
has been around and exploitable on major Linux distros for quite a long time.
Security patches have been published, so I decided to write a very simple PoC to
show how trivial it is to exploit this. The code in this repo should be really
self-explanatory after reading the linked write-up. Also thanks to
[@Drago1729][drago-twitter] for the idea and [the help][drago-tweet].

How to:

1. Get a vulnerable version of `pkexec` e.g. from `policykit-1 <= 0.105-31` in
   the [Debian repos][polkit-debian] or even built [from source][polkit-source].
   You can  have it locally installed or just copy the `pkexec` executable alone
   directly in this directory (make sure it's executable and setuid root).
2. Ensure you have GCC installed in order to compile the two C helpers in this
   repo.
3. Run `./expl.sh` and enjoy.

**NOTE**: `expl.sh` will first look for `pkexec` in the current working directory,
then fall-back to `$PATH`. Since `pkexec` is usually a setuid-root executable,
maybe run this in a VM and not on your machine, y'know...

Demo:

![result](terminal.gif)

Cheers, @mebeim :)


[qualys-wup]:    https://www.qualys.com/2022/01/25/cve-2021-4034/pwnkit.txt
[qualys-tweet]:  https://mobile.twitter.com/qualys/status/1486034484323569664
[polkit-debian]: http://ftp.us.debian.org/debian/pool/main/p/policykit-1/
[polkit-source]: https://salsa.debian.org/utopia-team/polkit/-/commits/master/
[drago-twitter]: https://twitter.com/Drago1729/
[drago-tweet]:   https://twitter.com/Drago1729/status/1486145716544319494
File Snapshot

[4.0K] /data/pocs/432dceeb6c72db38e5568b82d2574fb3ebf59522 ├── [ 513] expl.sh ├── [ 576] fake_module.c ├── [1.0K] helper.c ├── [1.2K] LICENSE ├── [1.7K] README.md └── [ 50K] terminal.gif 0 directories, 6 files
Shenlong Bot has cached this for you
Remarks
    1. It is advised to access via the original source first.
    2. Local POC snapshots are reserved for subscribers — if the original source is unavailable, the local mirror is part of the paid plan.
    3. Mirroring, verifying, and maintaining this POC archive takes ongoing effort, so local snapshots are a paid feature. Your subscription keeps the archive online — thank you for the support. View subscription plans →