Les deux plateformes appellent des outils externes (binaires net-snmp, fping, rrdtool, scripts de collecteurs) construits à partir de valeurs de configuration, et plusieurs de ces valeurs sont contrôlées par l'attaquant via l'UI/API authentifiée. Là où l'entrée est placée dans une commande sans assainissement, injecter des métacaractères shell exécute des commandes arbitraires sur l'hôte de supervision. LibreNMS a eu des injections de commandes via les paramètres d'équipement et de service, les champs d'options SNMP, et les entrées collectd/graphe ; Observium via une gestion similaire des équipements et des options. La commande injectée s'exécute en tant qu'utilisateur du service web ou poller. La fonctionnalité précise affectée et le fait qu'elle requière un privilège admin ou inférieur sont spécifiques à la version, donc identifier et faire correspondre l'avis sélectionne le chemin.
# the injectable field is version/feature-specific; the pattern is a config value
# that reaches a shell command. Examples (authenticated):
# device "overwrite_ip" / SNMP options field: 127.0.0.1 -c public; id
# service check parameters / collectd inputs carrying `;`, `|`, $(...)
# the injected command runs on the monitoring host (web/poller user). Match the
# LibreNMS/Observium version to the advisory for the exact field.
curl -sk -b cj 'https://<target>/ajax_form.php' --data 'type=...&snmp_options=127.0.0.1;id'
Notes d'exploitation#
- Les entrées injectables sont des valeurs de configuration qui aboutissent à des commandes shell : chaînes d'options SNMP, adresses/champs de réécriture d'équipement, et paramètres de service/collecteur ; testez-les avec des métacaractères une fois authentifié.
- L'exécution se fait en tant qu'utilisateur web/poller sur l'hôte de supervision, qui a accès à la base de données détenant les identifiants stockés de chaque équipement, donc la RCE se propage au parc.
- Le champ exact et le privilège requis sont spécifiques à la version ; identifiez (énumération) et faites correspondre l'avis.
- Combinez avec l'authentification pour l'étape d'accès ; à partir de l'exécution, récoltez les identifiants stockés et pivotez.