
OPNsense 26.7.6 - Élevée - À distance - Injection de ligne de configuration - NTP GPS fudge
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · opnsense-ntp-gps-fudge
Classe : Injection de ligne de configuration Portée : Distante
OPNsense core 26.7.6 (a842fe48) - opnsense.org
Reste de GHSA-fq94. Les fudge1 / fudge2 / refid GPS/PPS sont toujours concaténés dans /var/etc/ntpd.conf après que les hôtes timeserver ont été supprimés. Le chemin d'écrasement CVE-2026-53581 est autorisé par liste blanche (^cua[a-z0-9.,{}]+$ plus un périphérique caractère). La page NTP générale traite déjà le texte supplémentaire de ntpd.conf comme une escalade (userIsAdmin). Les ACL GPS/PPS sont séparées. Enregistrer configd_run('service restart ntpd'). ntpd s'exécute en root sans -u.
| ID | pas encore de CVE |
| Classe | Injection de ligne de configuration |
| Portée | Distante (WebGUI authentifiée) |
| CWE | CWE-93 / CWE-74 |
| CVSS | Élevé : 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N |
| Produit | OPNsense core (Deciso B.V.) |
| Affecté | OPNsense core 26.7.6 (a842fe48c21288d11a422cb944678e8eb308becf) NTP GPS/PPS fudge |
| Auth | Session WebGUI avec page-services-ntp-gps et/ou page-services-ntp-pps |
| Licence | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 uniquement |
J'ai épinglé le tag 26.7.6. Le lab est un gadget PHP de ntpd_configure_do épinglé, identité loopback 127.0.0.1:18830. Le CR/LF de GPS fudge a écrit une ligne logfile supplémentaire. Le CR/LF de l'hôte timeserver s'est réduit à un seul token.
| Méthode | Sink | Privilège |
|---|---|---|
GPS fudge1 CR/LF | épingler ntpd_configure_do ligne logfile /oracle/OPNSENSE-NTP-GPS-FUDGE-WITNESS supplémentaire après fudge 127.127.20.0 | Intégrité (prouvée en lab) : ligne supplémentaire dans ntpd.conf. Lab : fudge-newline=yes. |
honor de includefile / driftfile / statsdir | ntpd en root, sans -u | Intégrité (inférée) : politique ntpd supplémentaire / écriture de fichier à un chemin accessible en écriture par ntpd. ntpd non démarré dans le gadget. |
| CR/LF de l'hôte timeserver | suppression ntpd.inc:327-329 | Négatif (prouvé en lab) : timeserver réduit à un seul token. timeserver-stripped=yes. |
PPS fudge1 / refid CR/LF | bloc PPS fudge 127.127.22.0 | Intégrité (inférée) : même classe. Le gadget a exécuté le chemin GPS. |
| directive supplémentaire invalide | démarrage de ntpd | Disponibilité (inférée) : ntpd peut échouer à démarrer. |
| ce chemin | aucun | Recon : aucune lecture supplémentaire des secrets de config.xml. |
Prouvé en lab vs inféré : le newline de GPS fudge et la suppression timeserver sont des SUCCÈS en lab. Le sibling PPS et ntpd en direct en root sont inférés.
Nécessite : page-services-ntp-gps (lab) et/ou page-services-ntp-pps. Pas page-all. Un nœud caractère /dev/cua* en direct pour que configure_gps/pps retourne true. NTP activé. Jeton CSRF. Le <input type="text"> du navigateur ne conservera pas les CR/LF ; un POST direct depuis cette session le fera.
| Surface | Lab |
|---|---|
| Écrasement de chemin arbitraire CVE-2026-53581 | ../ ne quitte plus /dev/ (gps-char=char) |
| XSS GPS GHSA-h793 | aucune chaîne vers ce reste |
| CR/LF de l'hôte timeserver | supprimé (timeserver-stripped=yes) |
custom_options sur la page NTP générale | page-all / userIsAdmin uniquement |
| Non authentifié | fermé |
Pas de non authentifié. Pas d'écrasement de chemin 53581. Les hôtes timeserver ont déjà reçu la suppression.
cd lab
./run.sh
Loopback 127.0.0.1:18830. Projet Compose opnsense-ntp-gps-fudge. Témoin OPNSENSE-NTP-GPS-FUDGE-WITNESS. Dernière ligne :
SUCCESS opnsense-ntp-gps-fudge fudge-newline=yes timeserver-stripped=yes OPNSENSE-NTP-GPS-FUDGE-WITNESS
Supprimer les CR/LF (et traiter les guillemets) sur les fudge1 / fudge2 / refid GPS/PPS de la même manière que les hôtes timeserver le font déjà à ntpd.inc:327-329. Ou contraindre ces champs à une classe numérique / token. Garder le texte supplémentaire de ntpd.conf derrière userIsAdmin.
a842fe48c21288d11a422cb944678e8eb308becfntpd.inc ntpd_configure_doservices_ntpd_gps.php