pfSense CE 2.9.0-DEVELOPMENT - Moyenne - À distance - Écriture de fichier - Chemin du cache DynDNS
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · pfsense-dyndns-cache-path
Classe : Écriture de fichier Portée : Distante
pfSense CE 2.9.0-DEVELOPMENT (9363ac5) - pfsense.org
Un hôte personnalisé contourne is_domain(). updatedns construit le chemin du cache sous la forme /conf/dyndns_{if}{type} plus escapeshellarg($FQDN) plus {id}.cache. Les guillemets sont des octets du nom de fichier ; / divise toujours le chemin. Le contenu est IP|epoch, pas un shell.
| ID | pas encore de CVE |
| Classe | Écriture de fichier |
| Portée | Distante (WebGUI authentifié sauf indication contraire) |
| CWE | CWE-22 |
| CVSS | Moyen : 5.4 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N |
| Produit | pfSense CE |
| Affecté | 2.9.0-DEVELOPMENT (9363ac5b8651a1c7a333180425ce7719070f95f9) |
| Auth | Session WebGUI avec page-services-dynamicdnsclient |
| Licence | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 uniquement |
J'ai épinglé le master public 9363ac5. Le lab est un gadget PHP du sink épinglé, HTTP en boucle locale sur 127.0.0.1:19270.
Article de la série : https://abraxaslabs.tech/research/pfsense-ce-leftovers
| Méthode | Sink | Privilège |
|---|---|---|
| POST services_dyndns_edit.php nom d'hôte personnalisé avec / | chemin du cache file_put_contents utilisant escapeshellarg($FQDN) | Intégrité : Prouvé en lab : un nom d'hôte avec / a écrit IP |
| même reliquat | même sink | Recon : Aucun. Le contenu est IP |
| même reliquat | même sink | Disponibilité : Déduit : écraser un fichier dont le nom correspond au suffixe entre guillemets. |
Nécessite : page-services-dynamicdnsclient. CSRF-magic sur POST sauf indication contraire. WebGUI PHP-FPM est root.
Nécessite : page-services-dynamicdnsclient. CSRF-magic sur POST sauf indication contraire. WebGUI PHP-FPM est root. CSRF-magic sur POST sauf indication contraire. WebGUI PHP-FPM est root.
Non authentifié. mwexec du FQDN. exécution cron/php de *.cache. Le dyndns non-Custom rejette cet hôte.
Pas de Diagnostics : Command sauf si cette page est également accordée.
cd lab
./run.sh
Boucle locale 127.0.0.1:19270. Projet Compose pfsense-dyndns-cache-path. Témoin PFSENSE-DYNDNS-CACHE-PATH-WITNESS. Boucle locale uniquement : 127.0.0.1:19270. Projet Compose pfsense-dyndns-cache-path. Témoin PFSENSE-DYNDNS-CACHE-PATH-WITNESS. Gadget PHP des lignes épinglées. La stack est démontée après l'exécution.
Dernière ligne :
SUCCESS PFSENSE-DYNDNS-CACHE-PATH control-under-conf=yes trigger-outside-conf=yes PFSENSE-DYNDNS-CACHE-PATH-WITNESS
Ne pas utiliser escapeshellarg comme nom de fichier. Appliquer basename / is_domain à l'hôte.
9363ac5b8651a1c7a333180425ce7719070f95f9