
PoC modifié pour l'exécution de code à distance (RCE) sur MariaDB v11.1 via UDF, renvoyant la sortie de commande en ligne via des requêtes SQL. Comprend une comparaison de code détaillée et des instructions de compilation pour Windows.
MariaDB v11.1 RCE via UDF — PoC modifié basé sur Ant1sec-ops/CVE-2024-27766.
| Affecté | MariaDB v11.1 |
| Corrigé dans | 10.5.25 / 10.6.18 / 10.11.8 / 11.0.6 / 11.1.5 / 11.2.4 / 11.4.2+ |
| Type | RCE via fonction définie par l'utilisateur (UDF) |
MariaDB v11.1 permet à un attaquant possédant des privilèges de base de données suffisants (privilège FILE + accès en écriture au répertoire des plugins) d'enregistrer une UDF malveillante et d'exécuter des commandes OS arbitraires via celle-ci.
Remarque : La Fondation MariaDB conteste ce CVE au motif qu'aucune limite de privilège n'est franchie. L'exploitation nécessite un accès administrateur à la base de données ou équivalent.
Le PoC original utilise un type de retour longlong, donc do_system() ne renvoie que si la commande a réussi — vous ne pouvez pas voir la sortie directement depuis SQL.
Cette version change le type de retour en char *, ce qui redirige stdout vers le résultat de la requête. Aucun canal externe nécessaire ; exécutez simplement SELECT do_system('whoami') et la sortie revient directement.
| Original | Ce PoC | |
|---|---|---|
| Type de retour | longlong | char * |
| Exécution | system() | boucle _popen() + fgets() |
| Résultat SQL | code de sortie | stdout de la commande |
| Mémoire | aucune | allouée sur le tas, libérée dans deinit |
Une chose à noter : le fait de retourner char * depuis une UDF nécessite que MariaDB connaisse la taille du tampon à l'avance. do_system_init définit initid->max_length = 65536, ce qui correspond au tampon de sortie alloué dans la fonction principale.
Étant donné que le type de retour a changé, RETURNS STRING doit être utilisé lors de l'enregistrement de la fonction — et non RETURNS INTEGER comme dans l'original.
CREATE FUNCTION do_system RETURNS STRING SONAME 'do_system.dll';
_popen / _pclose)FILE et accès en écriture au répertoire des pluginsPour des fins éducatives et de recherche uniquement. Ne pas utiliser contre des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas d'autorisation explicite de test.