
jshunter est un outil en ligne de commande conçu pour analyser les fichiers JavaScript et extraire des points de terminaison. Cet outil se spécialise dans l'identification de données sensibles, telles que les points de terminaison d'API et les potentielles vulnérabilités de sécurité, ce qui en fait une ressource essentielle pour les chasseurs de bugs et les chercheurs en sécurité.
Outil professionnel d'analyse de sécurité JavaScript
Découverte complète de points de terminaison, détection de données sensibles et analyse avancée de code pour les professionnels de la sécurité
JSHunter est un outil en ligne de commande complet pour l'analyse de sécurité JavaScript et la découverte de points de terminaison. Conçu pour les professionnels de la sécurité, les testeurs d'intrusion et les développeurs, il offre des capacités d'analyse de niveau entreprise avec des algorithmes de détection de haute précision et des fonctionnalités de reporting professionnelles.
https://github.com/user-attachments/assets/5a5f60fa-f8dc-4aac-bd06-2e93779f9af4
JSHunter en action — une capture réelle du terminal de l'interface CLI (chaque secret affiché est une fausse donnée de test)
Précision de niveau entreprise avec des algorithmes d'analyse avancés
JSHunter analyse le JavaScript qu'il scanne au lieu de se contenter de le comparer à des motifs. Un scanner ECMAScript à passe unique classe chaque octet de la réponse comme littéral de chaîne, littéral de gabarit, commentaire, littéral d'expression régulière ou code, et les règles de détection sont évaluées par rapport à cette classification.
Cela est important car une regex n'a aucune idée de ce qu'elle a trouvé. Les mêmes quarante caractères base64 signifient « identifiant » à l'intérieur d'un littéral de chaîne, « hash de chunk » à l'intérieur d'un identifiant minifié, et rien du tout lorsqu'ils chevauchent la jointure entre deux jetons adjacents. Savoir de quoi il s'agit remplace un tas d'heuristiques de proximité par une réponse structurelle :
key, le moteur récupère l'identifiant ou la clé de propriété à laquelle la valeur est réellement liée — const stripeSecret = "..." se lit très différemment de {contentHash: "..."}, et une règle basée uniquement sur la forme exige désormais cette liaison.role, SID Twilio — sont classifiées plutôt que signalées comme des fuites. --include-public les signale quand même.Chaque rejet est conditionné au fait que le corps soit de manière fiable du JavaScript ou du JSON. Sur tout autre chose — un fichier .env, de la prose, du HTML brut — le moteur apporte des preuves mais ne supprime jamais, de sorte qu'une entrée mal classifiée ne peut jamais masquer un secret. --no-structural désactive toute cette couche et restaure le comportement de la v0.7.
Les résultats portent le raisonnement sous forme d'un objet evidence dans --json, --ndjson et le sac de propriétés SARIF :```json
"exposure": "secret",
"evidence": {
"region": "string-literal",
"role": "assignment",
"bound_to": "awsAccessKeyId",
"shape": "opaque-token",
"charset": "alphanumeric",
"signals": [
{"name": "in-literal", "delta": 0.04, "detail": "value is a complete string-literal"},
{"name": "credential-binding", "delta": 0.12, "detail": "bound to 'awsAccessKeyId'"}
]
}
`--stats` indique ce que chaque étape a supprimé, afin que le pipeline reste auditable.
### Graphe de chunks et découverte de routes