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

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2021-40724 PoC — Adobe Acrobat Reader Android Abritrary Code Execution Vulnerability

Source
Associated Vulnerability
Title:Adobe Acrobat Reader Android Abritrary Code Execution Vulnerability (CVE-2021-40724)
Description:Acrobat Reader for Android versions 21.8.0 (and earlier) are affected by a Path traversal vulnerability. An unauthenticated attacker could leverage this vulnerability to achieve arbitrary code execution in the context of the current user. Exploitation of this issue requires user interaction in that a victim must open a malicious file.
Description
This is an Exploit App I made when solving the DocumentViewer challenge (CVE-2021-40724) from MobileHackingLab. It will download a libdocviewe_pro.so library from your local machine unto the vulnerable app's internal storage, load it upon relaunch and achieve an RCE.
Readme
## DocViewerExploit App - CVE-2021-40724
This is the source code to exploiting the [Document Viewer](https://www.mobilehackinglab.com/course/lab-document-viewer-rce) by [MobileHackingLab](https://www.mobilehackinglab.com/).

## About the Vulnerable App
This is an exploit app for the [MobileHackingLab DocumentViewer Abdroid App Dynamic Code Loading RCE challenge](https://www.mobilehackinglab.com/course/lab-document-viewer-rce).
This challenge emulates `CVE-2021-40724` vulnerability identified in Adobe Acrobat Reader Android app.

![image](https://github.com/user-attachments/assets/fe69070e-7627-4004-9eac-bbf12b6c6d65)  


The app dynamically loads code from a library file but there exist an LFI vulnerability due to how the app handles incoming URIs with getLastPathSegment().  

![image](https://github.com/user-attachments/assets/67f50d78-da2d-45b5-bb77-45c16ed40d07) ![image](https://github.com/user-attachments/assets/b7503319-f814-4b26-99e5-c384edd7ce8d)

## About the Exploit App 

This LFI vulnerability can be abused to write our own library files into the vulnerable app which gets loaded upon app launch.

![image](https://github.com/user-attachments/assets/82454c6c-2a6b-4b69-a6c6-ec6aae894feb)    ![image](https://github.com/user-attachments/assets/d70ade6f-401e-4c99-be45-90f89af59cb0)

![image](https://github.com/user-attachments/assets/19259108-5a77-4c60-9deb-c9a2d8d2cd6f)  


When our malicious library file gets loaded, our remote command gets executed

![image](https://github.com/user-attachments/assets/231b15b5-5d06-47ba-9c9d-17e5e12efa28)

## 

Reach Out to me:  

[![tinopreter](https://skillicons.dev/icons?i=twitter)](https://x.com/tinopreter)
[![tinopreter](https://skillicons.dev/icons?i=linkedin)](https://www.linkedin.com/in/tinopreter)
[![tinopreter](https://skillicons.dev/icons?i=gmail)](mailto:osei.somuah771@gmail.com)

File Snapshot

[4.0K] /data/pocs/2775a19bc94b4d612abbda1755b78a90f886e438 ├── [4.0K] app │   ├── [1.0K] build.gradle.kts │   ├── [ 750] proguard-rules.pro │   └── [4.0K] src │   ├── [4.0K] androidTest │   │   └── [4.0K] java │   │   └── [4.0K] com │   │   └── [4.0K] tino │   │   └── [4.0K] badsploit │   │   └── [ 750] ExampleInstrumentedTest.java │   ├── [4.0K] main │   │   ├── [1.4K] AndroidManifest.xml │   │   ├── [4.0K] java │   │   │   └── [4.0K] com │   │   │   └── [4.0K] tino │   │   │   └── [4.0K] badsploit │   │   │   └── [1.6K] MainActivity.java │   │   └── [4.0K] res │   │   ├── [4.0K] drawable │   │   │   ├── [5.5K] ic_launcher_background.xml │   │   │   └── [1.7K] ic_launcher_foreground.xml │   │   ├── [4.0K] layout │   │   │   └── [1.5K] activity_main.xml │   │   ├── [4.0K] mipmap-anydpi │   │   │   ├── [ 343] ic_launcher_round.xml │   │   │   └── [ 343] ic_launcher.xml │   │   ├── [4.0K] mipmap-hdpi │   │   │   ├── [2.8K] ic_launcher_round.webp │   │   │   └── [1.4K] ic_launcher.webp │   │   ├── [4.0K] mipmap-mdpi │   │   │   ├── [1.7K] ic_launcher_round.webp │   │   │   └── [ 982] ic_launcher.webp │   │   ├── [4.0K] mipmap-xhdpi │   │   │   ├── [3.8K] ic_launcher_round.webp │   │   │   └── [1.9K] ic_launcher.webp │   │   ├── [4.0K] mipmap-xxhdpi │   │   │   ├── [5.8K] ic_launcher_round.webp │   │   │   └── [2.8K] ic_launcher.webp │   │   ├── [4.0K] mipmap-xxxhdpi │   │   │   ├── [7.6K] ic_launcher_round.webp │   │   │   └── [3.8K] ic_launcher.webp │   │   ├── [4.0K] values │   │   │   ├── [ 147] colors.xml │   │   │   ├── [ 71] strings.xml │   │   │   └── [ 399] themes.xml │   │   ├── [4.0K] values-night │   │   │   └── [ 329] themes.xml │   │   └── [4.0K] xml │   │   ├── [ 478] backup_rules.xml │   │   └── [ 551] data_extraction_rules.xml │   └── [4.0K] test │   └── [4.0K] java │   └── [4.0K] com │   └── [4.0K] tino │   └── [4.0K] badsploit │   └── [ 379] ExampleUnitTest.java ├── [ 167] build.gradle.kts ├── [4.0K] gradle │   ├── [ 940] libs.versions.toml │   └── [4.0K] wrapper │   ├── [ 58K] gradle-wrapper.jar │   └── [ 233] gradle-wrapper.properties ├── [1.2K] gradle.properties ├── [5.6K] gradlew ├── [2.6K] gradlew.bat ├── [1.8K] README.md └── [ 534] settings.gradle.kts 31 directories, 36 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 →