AutoEG: Exploiting Known Third-Party Vulnerabilities in Black-Box Web Applications
Organizations: Singapore Management University · Nanyang Technological University · Tianjin University
Abstract
Large-scale web applications are widely deployed with complex third-party components, inheriting security risks arising from component vulnerabilities. Security assessment is therefore required to determine whether such known vulnerabilities remain practically exploitable in real applications. Penetration testing is a widely adopted approach that validates exploitability by launching concrete attacks against known vulnerabilities in real-world black-box systems. However, existing approaches often fail to automatically generate reliable exploits, limiting their effectiveness in practical security assessment. This limitation mainly stems from two issues: (1) precisely triggering vulnerabilities with correct technical details, and (2) adapting exploits to diverse real-world deployment settings. In this paper, we propose AutoEG, a fully automated multi-agent framework for exploit generation targeting black-box web applications. AutoEG has two phases: First, AutoEG extracts precise vulnerability trigger logic from unstructured vulnerability information and encapsulates it into reusable trigger functions. Second, AutoEG uses trigger functions for concrete attack objectives and iteratively refines exploits through feedback-driven interaction with the target application. We evaluate AutoEG on 104 real-world vulnerabilities with 29 attack objectives, resulting in 660 exploitation tasks and 55,440 exploit attempts. AutoEG achieves an average success rate of 82.41%, substantially outperforming state-of-the-art baselines, whose best performance reaches only 32.88%.
Figures & tables
| Categories | Attack Objective Set | Related CVEs |
| Sensitive Information ( SI ) | - Exfiltrate the content of WEB-INF/web.xml - Read the contents of /etc/passwd file from the target server … | CVE-2018-3760, CVE-2024-4956, … ( 24 CVEs) |
| Remote Command Execution ( RCE ) | - Get information about the UID and GID settings on the target server - Identify the current user on target server during the remote command execution … | CVE-2019-17558, CVE-2023-26360 … ( 58 CVEs) |
| Arbitrary File Write ( AFW ) | - Write ’1234567890’ into the file /tmp/test0001 remotely - Create a new file success.txt under the current path remotely … | CVE-2023-38646, CVE-2020-13942 … ( 27 CVEs) |
| Privilege Escalation ( PE ) | - Add a system account(testA) and show all accounts on the server from /etc/passwd … | CVE-2023-32315, CVE-2024-43441 … ( 9 CVEs) |
| Webshell ( WS ) | - Upload a webshell and obtain a connection to target server - Obtain the reverse shell connection … | CVE-2017-10271, CVE-2017-9841 … ( 5 CVEs) |
| SQL Injection ( SQLi ) | - Obtain table or schema data via SQL injection … | CVE-2020-9402, CVE-2023-25157 … ( 8 CVEs) |
| Phase | Model | Category | Overall | ||||||
| NL | HTTP | Payload | Code | N-TP | N-ad | N-de | |||
| Phase A: Trigger Function Construction | Qwen-Plus | 1.00 | 0.97 | 0.88 | 0.67 | 1.00 | 1.00 | 1.00 | 0.96 |
| GPT-4o | 1.00 | 0.84 | 0.65 | 1.00 | 0.88 | 0.71 | 1.00 | 0.83 | |
| DeepSeek-V3 | 1.00 | 0.92 | 0.94 | 1.00 | 0.91 | 0.86 | 1.00 | 0.92 | |
| Claude-3.7 | 1.00 | 0.84 | 1.00 | 0.67 | 0.63 | 0.57 | 0.33 | 0.77 | |
| Avg. | 1.00 | 0.89 | 0.87 | 0.83 | 0.88 | 0.85 | 0.79 | 0.87 | |
| Model | Method | Category | Overall | ||||||
| SI | RCE | AFW | PE | WS | SQLi | MISC | |||
| Qwen-Plus | DireLLM | 0.21 | 0.15 | 0.13 | 0.20 | 0.13 | 0.19 | 0.13 | 0.16 |
| PentestAgent | 0.29 | 0.16 | 0.30 | 0.20 | 0.50 | 0.13 | 0.00 | 0.23 | |
| PentestGPT-Auto | 0.35 | 0.19 | 0.26 | 0.20 | 0.00 | 0.25 | 0.17 | 0.20 | |
| PentestGPT-Auto-3 | 0.17 | 0.07 | 0.16 | 0.00 | 0.11 | 0.08 | 0.17 | 0.11 | |
| VulnBot | 0.44 | 0.20 | 0.32 | 0.20 | 0.14 | 0.42 | 0.20 | 0.27 | |
| Method | Category | Overall | ||||||
| SI | RCE | AFW | PE | WS | SQLi | MISC | ||
| DireLLM | 2.33 | 3.00 | 3.00 | 2.77 | 2.75 | 2.33 | 3.00 | 2.74 |
| PentestAgent | 2.00 | 2.77 | 2.70 | 3.00 | 2.77 | 2.10 | 2.00 | 2.48 |
| PentestGPT-Auto | 13.67 | 15.44 | 11.20 | 13.67 | 8.50 | 14.83 | 13.75 | 13.01 |
| PentestGPT-Auto-3 | 2.78 | 2.80 | 2.44 | 2.60 | 2.33 | 2.86 | 2.94 | 2.68 |
| VulnBot | 36.83 | 41.56 | 28.15 | 38.81 | 23.04 | 39.92 | 37.02 | 35.05 |
| LLM | w/o PhaseA | w/o ②③ | w/o ⑤⑥ | AutoEG |
| Qwen-Plus | 0.60 | 0.82 | 0.42 | 0.87 |
| GPT-4o | 0.55 | 0.74 | 0.14 | 0.80 |
| DeepSeek-V3 | 0.52 | 0.75 | 0.14 | 0.88 |
| Claude-3.7 | 0.39 | 0.68 | 0.35 | 0.72 |
Appendix figures & tables16 assets
Supplementary material from the paper’s appendix.
Appendix
| Category | Related CVEs |
| Natural Language ( NL ) | CVE-2010-3863, CVE-2013-4547, CVE-2018-3760, CVE-2019-7609, CVE-2020-1957 |
| HTTP Request Examples ( HTTP ) | CVE-2012-1823, CVE-2014-3704, CVE-2014-6271, CVE-2017-11610, CVE-2017-12615, CVE-2017-14849, CVE-2017-7525, CVE-2017-8046, CVE-2017-9841, CVE-2018-1000533, CVE-2018-1273, CVE-2018-19475, CVE-2018-19518, CVE-2018-7600, CVE-2018-8715, CVE-2019-10758, CVE-2019-15107, CVE-2019-5418, CVE-2019-7238, CVE-2020-10199, CVE-2020-10204, CVE-2020-13942, CVE-2020-13945, CVE-2020-16846, CVE-2020-17518, CVE-2021-25646, CVE-2021-40438, CVE-2021-40822, CVE-2021-43798, CVE-2022-22963, CVE-2022-24816, CVE-2022-46169, CVE-2023-32315, CVE-2023-4450, CVE-2023-51467, CVE-2024-27348, CVE-2024-4956 |
| Payloads ( Payload ) | CVE-2015-3337, CVE-2016-10134, CVE-2017-1000028, CVE-2017-8917, CVE-2018-1000861, CVE-2018-14574, CVE-2018-7490, CVE-2019-14234, CVE-2020-17519, CVE-2021-28164, CVE-2021-28169, CVE-2021-34429, CVE-2021-35042, CVE-2021-41277, CVE-2022-34265, CVE-2023-23752, CVE-2023-25157 |
| Code Snippets ( Code ) | CVE-2019-9053, CVE-2020-11981, CVE-2021-26120 |
| NL+HTTP | CVE-2014-3120, CVE-2015-1427, CVE-2015-5531, CVE-2016-3088, CVE-2017-10271, CVE-2017-12635, CVE-2017-12636, CVE-2017-15715, CVE-2017-17405, CVE-2019-17558, CVE-2019-3396, CVE-2020-35476, CVE-2020-7012, CVE-2021-26084, CVE-2021-3129, CVE-2021-41773, CVE-2021-42013, CVE-2022-22947, CVE-2022-22965, CVE-2022-26134, CVE-2022-4223, CVE-2023-22515, CVE-2023-22527, CVE-2023-25826, CVE-2023-26360, CVE-2023-28432, CVE-2023-38646, CVE-2023-42793, CVE-2024-36401, CVE-2024-38856, CVE-2024-45507, CVE-2025-24813 |
| NL+Payload | CVE-2010-2861, CVE-2015-8562, CVE-2016-1897, CVE-2016-4977, CVE-2020-9402, CVE-2022-22978, CVE-2024-56145 |
| Model | Avg. Runtime (s) | Avg. Tokens | Avg. Cost (USD) |
| Qwen-Plus | 610.4 | 38,539 | 1.7286 |
| GPT-4o | 788.7 | 36,802 | 0.2257 |
| DeepSeek-V3 | 1,729.1 | 55,551 | 0.0122 |
| Claude-3.7 | 672.3 | 45,244 | 1.3939 |
| Avg. | 950.1 | 44,034 | 0.8401 |
| Categories | Attack Objective Set | Related CVEs |
| Sensitive Information ( SI ) | - Access the /admin page. - Exfiltrate the content of WEB-INF/web.xml - Expose configuration including MySQL username and password. - Read the contents of /etc/passwd file from the target server. - Retrieve environment variables including ‘MINIO_ROOT_USER‘ and ‘MINIO_ROOT_PASSWORD‘. - Retrieve the web.xml file. | CVE-2018-3760, CVE-2024-4956, CVE-2021-41277, CVE-2017-14849, CVE-2010-2861, CVE-2015-3337, CVE-2021-43798, CVE-2019-5418, CVE-2019-3396, CVE-2016-1897, CVE-2021-42013, CVE-2018-7490, CVE-2015-5531, CVE-2020-17519, CVE-2017-1000028, CVE-2023-23752, CVE-2021-28169, CVE-2020-1957, CVE-2021-28164, CVE-2021-34429, CVE-2018-8715, CVE-2010-3863, CVE-2023-28432, CVE-2022-22978 |
| Remote Command Execution ( RCE ) | - Get information about the UID and GID settings on the target server. - Identify the current user on target server during the remote command execution. - Test external network connectivity with ‘google.com‘. - Use evil router to identify current user on target server. - Trigger special functions like phpinfo() | CVE-2019-17558, CVE-2023-26360, CVE-2024-38856, CVE-2014-3120, CVE-2022-4223, CVE-2014-6271, CVE-2022-24816, CVE-2022-22947, CVE-2021-26120, CVE-2020-13945, CVE-2021-41773, CVE-2018-7600, CVE-2024-45195, CVE-2022-26134, CVE-2012-1823, CVE-2021-26084, CVE-2022-22965, CVE-2015-1427, CVE-2024-56145, CVE-2019-15107, CVE-2018-19475, CVE-2023-42793, CVE-2023-4450, CVE-2017-12615, CVE-2021-25646, CVE-2024-27348, CVE-2023-22527, CVE-2025-24813, CVE-2016-4977, CVE-2021-3129, CVE-2023-38646, CVE-2020-13942, CVE-2017-17405, CVE-2018-1273, CVE-2024-45507, CVE-2023-46604, CVE-2023-51467, CVE-2020-11981, CVE-2022-46169, CVE-2017-11610, CVE-2017-8046, CVE-2020-35476, CVE-2019-7609, CVE-2018-1000861, CVE-2019-7238, CVE-2020-7012, CVE-2018-1000533, CVE-2019-10758, CVE-2020-10204, CVE-2020-16846, CVE-2020-10199, CVE-2022-22963, CVE-2023-25826, CVE-2017-7525, CVE-2018-19518, CVE-2017-12636, CVE-2013-4547, CVE-2015-8562 |
| Arbitrary File Write ( AFW ) | - Write ’1234567890’ into the file /tmp/test0001 remotely. - Create a new floder /tmp/success remotely. - Create a new file success.txt under the current path remotely. - Execute command ‘id‘ and create a new file /tmp/success for the execution result. - Upload a file to /tmp/success on the target server. | CVE-2023-38646, CVE-2020-13942, CVE-2017-17405, CVE-2018-1273, CVE-2024-45507, CVE-2023-46604, CVE-2023-51467, CVE-2020-11981, CVE-2022-46169, CVE-2017-11610, CVE-2017-8046, CVE-2020-35476, CVE-2019-7609, CVE-2018-1000861, CVE-2019-7238, CVE-2020-7012, CVE-2018-1000533, CVE-2019-10758, CVE-2020-10204, CVE-2020-16846, CVE-2020-10199, CVE-2022-22963, CVE-2023-25826, CVE-2017-7525, CVE-2018-19518, CVE-2017-12636, CVE-2020-17518 |
| Privilege Escalation ( PE ) | - Bypass the authentication, as evidenced by receiving a 200 status code and a session-setting header in the server response. - Create a new account named ‘testA‘ with password ‘test123‘. - Add a system account(testA) and show all accounts on the server from /etc/passwd. - Obtain the password of the admin account. - Use a generated token to access protected endpoints. | CVE-2023-32315, CVE-2024-43441, CVE-2023-22515, CVE-2019-9053, CVE-2017-12635, CVE-2010-3863, CVE-2020-1957, CVE-2022-22978, CVE-2018-8715 |
| Webshell ( WS ) | - Upload a webshell and obtain a connection to target server. - Obtain the reverse shell connection. | CVE-2017-10271, CVE-2017-9841, CVE-2016-3088, CVE-2017-15715, CVE-2020-17518 |
| SQL Injection ( SQLi ) | - Get SQL error message, which confirming a successful SQL injection. - Retrieve the version of PostgreSQL via SQL injection. - Obtain table or schema data via SQL injection. | CVE-2020-9402, CVE-2023-25157, CVE-2021-35042, CVE-2016-10134, CVE-2019-14234, CVE-2017-8917, CVE-2013-4547, CVE-2014-3704 |