Gratuit
Pour essayer
- 1 projet
- Analyse des paquets et du code
- Paquets inventés et malveillants
- Résumé des failles
Outils
- Rapport PDF technique
- Export OpenVEX
- SBOM CycloneDX
- Clé pour votre CI
Déposez votre fichier de dépendances ou l'archive de votre projet. Tamiso écarte les alertes qui ne vous concernent pas et vous dit, en français, quoi corriger et comment.
3 failles vous concernent sur 31 connues.
Mets à jour next de la version 15.2.2 vers 15.2.3 ou plus récente (corrige CVE-2025-29927). Lance npm install next@15.2.3 pour mettre à jour package.json et le fichier de verrouillage. Ensuite, lance les tests et vérifie que l'application démarre.
Mets à jour path-to-regexp de la version 0.1.7 vers 0.1.10 ou plus récente (corrige CVE-2024-45296). path-to-regexp est une dépendance indirecte, arrivée par express : mets d'abord à jour express vers une version qui utilise path-to-regexp 0.1.10 ou plus ; sinon ajoute path-to-regexp dans overrides de package.json, puis relance l'installation avec npm. Ensuite, lance les tests et vérifie que l'application démarre.
Lisez l'avis et regardez si votre application utilise la fonction ou l'option concernée. Si oui, mettez à jour vers 1.6.0. Si non, vous pouvez ignorer ces failles. Avis : https://osv.dev/vulnerability/GHSA-wf5p-g6vw-rhxx
src/lib/http.ts:1
src/lib/http.ts:2
lodash 4.17.20 CVE-2021-23337
Injection de commande par la fonction template
Écartée par vous : notre code n'appelle jamais la partie vulnérable.
Importé dans votre code : src/lib/http.ts:2
Ils n'existent pas sur npm. Souvent un nom inventé par une IA : quelqu'un peut le publier plus tard avec du code malveillant. Sauf s'il vient d'un registre privé, retirez-le.
stripe-checkout-helper-ts3const stripe = new Stripe("sk_l****")
Avec cette clé, n'importe qui peut créer des paiements, des remboursements et lire vos clients.
2alter table orders disable row level security;
La table redevient lisible et modifiable par tout le monde avec la clé anon.
Sans cet en-tête, le navigateur peut encore ouvrir la version non chiffrée du site.
Les fichiers .map permettent de reconstruire le code source d'origine, commentaires compris.
https://boutique-martin.fr/_next/static/chunks/main.js.mapUn projet par application cliente. Tamiso garde l'historique des versions, revérifie chaque jour et prépare ce que vous envoyez à vos clients.
Un seul endroit pour tout : un fichier de dépendances vérifie les paquets, une archive .zip ou un dépôt GitHub vérifie aussi le code. Tamiso compare avec vos décisions et ne vous montre que ce qui reste.
Chaque jour, Tamiso revérifie les paquets de la dernière version dans les bases de failles et le catalogue CISA KEV. Une nouvelle faille apparaît ici et dans l'historique.
Dernière vérification automatique le 01/11/2026 à 06:00 UTC. 1 nouvelle faille le 30/10.
Le code envoyé en .zip n'est pas gardé : chaque jour, seuls les paquets sont revérifiés. Reliez le dépôt pour que le code le soit aussi.
Versions des dépendances et analyses du code, des plus récentes aux plus anciennes.
Dans src/lib/stripe.ts:3 : Clé secrète Stripe dans le code. Révoquez la clé dans le tableau de bord Stripe, puis lisez-la depuis une variable d'environnement côté serveur. Corrige seulement ces endroits, puis explique-moi le changement.
Dans supabase/migrations/003_orders.sql:1 : Table Supabase sans RLS. Ajoutez « alter table … enable row level security; » puis des règles qui limitent chaque ligne à son propriétaire (auth.uid()). Corrige seulement ces endroits, puis explique-moi le changement.
Dans supabase/migrations/003_orders.sql:2 : RLS désactivée sur une table. Supprimez cette ligne et activez RLS avec des règles par utilisateur. Corrige seulement ces endroits, puis explique-moi le changement.
Fais ces mises à jour une par une, en lançant les tests après chacune : - Mets à jour next de la version 15.2.2 vers 15.2.3 ou plus récente (corrige CVE-2025-29927). Lance npm install next@15.2.3 pour mettre à jour package.json et le fichier de verrouillage. Ensuite, lance les tests et vérifie que l'application démarre. - Mets à jour path-to-regexp de la version 0.1.7 vers 0.1.10 ou plus récente (corrige CVE-2024-45296). path-to-regexp est une dépendance indirecte, arrivée par express : mets d'abord à jour express vers une version qui utilise path-to-regexp 0.1.10 ou plus ; sinon ajoute path-to-regexp dans overrides de package.json, puis relance l'installation avec npm. Ensuite, lance les tests et vérifie que l'application démarre.
Mets à jour next de la version 15.2.2 vers 15.2.3 ou plus récente (corrige CVE-2025-29927). Lance npm install next@15.2.3 pour mettre à jour package.json et le fichier de verrouillage. Ensuite, lance les tests et vérifie que l'application démarre.
Mets à jour path-to-regexp de la version 0.1.7 vers 0.1.10 ou plus récente (corrige CVE-2024-45296). path-to-regexp est une dépendance indirecte, arrivée par express : mets d'abord à jour express vers une version qui utilise path-to-regexp 0.1.10 ou plus ; sinon ajoute path-to-regexp dans overrides de package.json, puis relance l'installation avec npm. Ensuite, lance les tests et vérifie que l'application démarre.
Lisez l'avis et regardez si votre application utilise la fonction ou l'option concernée. Si oui, mettez à jour vers 1.6.0. Si non, vous pouvez ignorer ces failles. Avis : https://osv.dev/vulnerability/GHSA-wf5p-g6vw-rhxx
src/lib/http.ts:1
src/lib/http.ts:2
Ce que Tamiso a vérifié autour des paquets et du code, et ce qu'il manque pour durcir le projet.
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
Ils n'existent pas sur npm. Souvent un nom inventé par une IA : quelqu'un peut le publier plus tard avec du code malveillant. Sauf s'il vient d'un registre privé, retirez-le.
Si c'est un paquet interne de votre registre privé, le risque reste réel (dependency confusion) : réservez aussi ce nom, ou le scope @…, sur le registre public, et configurez le registre privé explicitement (.npmrc, --index-url) pour que l'installation ne cherche jamais ailleurs.
stripe-checkout-helper-tsUne faille passe « à corriger » si elle est exploitée activement (catalogue CISA KEV, version makiety), si sa probabilité d'exploitation EPSS dépasse 10 %, si sa gravité est critique, ou élevée avec une probabilité d'exploitation d'au moins 1 %. Elle est écartée si sa gravité est faible, ou moyenne avec une probabilité d'exploitation inférieure à 1 %, ou si le paquet ne sert qu'au développement. Le reste est « à vérifier ». Une seule mise à jour corrige souvent plusieurs failles : elles sont donc regroupées par paquet. Votre décision passe toujours avant la règle. Exception : une faille critique ou très probablement exploitée dans un paquet de développement reste « à vérifier », car ce paquet tourne sur vos machines et en CI.
Un paquet connu comme malveillant (base OpenSSF des paquets malveillants) est toujours « à corriger », même s'il ne sert qu'au développement : il agit dès son installation. Ce projet a aussi une analyse du code (01/11/2026) : une faille dans un paquet direct que le code n'importe jamais et dont aucun autre paquet n'a besoin (d'après le fichier de verrouillage) descend d'un niveau, et si l'analyse par l'IA a montré que le code n'utilise pas la partie vulnérable, la faille est écartée avec cette raison. Les failles exploitées activement ne sont jamais écartées ainsi.
Vos décisions suivent les statuts de la norme OpenVEX (« non concerné » avec sa justification, ou « concerné »). L'export OpenVEX les donne dans un fichier JSON au format standard (le même que lisent vexctl, Trivy ou Grype) : à joindre à votre SBOM pour vos clients et auditeurs. Les failles sans décision y figurent « en cours d'analyse ».
D'où viennent les données, par quelles fonctions elles passent et où elles arrivent. Les problèmes sont placés dans la fonction où ils apparaissent ; choisissez-en un pour ne garder que son chemin.
La carte garde alors seulement son chemin : l'entrée d'où viennent les données, les fonctions traversées et l'endroit où elles arrivent.
3const stripe = new Stripe("sk_l****")
Avec cette clé, n'importe qui peut créer des paiements, des remboursements et lire vos clients.
Révoquez la clé dans le tableau de bord Stripe, puis lisez-la depuis une variable d'environnement côté serveur.
1create table orders (id uuid primary key, items jsonb, email text);
Sans Row Level Security, la clé anon publique de votre application suffit pour lire et modifier toute la table.
Ajoutez « alter table … enable row level security; » puis des règles qui limitent chaque ligne à son propriétaire (auth.uid()).
2alter table orders disable row level security;
La table redevient lisible et modifiable par tout le monde avec la clé anon.
Supprimez cette ligne et activez RLS avec des règles par utilisateur.
4const res = await pool.query(`SELECT * FROM products WHERE name LIKE '%${q}%'`)
Si une valeur vient de l'utilisateur, il peut lire ou effacer la base (injection SQL).
Utilisez des paramètres (%s, ?, $1) ou l'ORM au lieu de coller les valeurs dans la requête.
Carte construite par lecture du code (Python, JavaScript et TypeScript), sans l'exécuter : un appel dynamique ou un décorateur peut lui échapper. Seuls les noms des fonctions, des routes et les numéros de ligne sont gardés.
Avec cette clé, n'importe qui peut créer des paiements, des remboursements et lire vos clients.
Révoquez la clé dans le tableau de bord Stripe, puis lisez-la depuis une variable d'environnement côté serveur.
src/lib/stripe.ts:3const stripe = new Stripe("sk_l****")
Dans src/lib/stripe.ts:3 : Clé secrète Stripe dans le code. Révoquez la clé dans le tableau de bord Stripe, puis lisez-la depuis une variable d'environnement côté serveur. Corrige seulement ces endroits, puis explique-moi le changement.
Sans Row Level Security, la clé anon publique de votre application suffit pour lire et modifier toute la table.
Ajoutez « alter table … enable row level security; » puis des règles qui limitent chaque ligne à son propriétaire (auth.uid()).
supabase/migrations/003_orders.sql:1create table orders (id uuid primary key, items jsonb, email text);
Dans supabase/migrations/003_orders.sql:1 : Table Supabase sans RLS. Ajoutez « alter table … enable row level security; » puis des règles qui limitent chaque ligne à son propriétaire (auth.uid()). Corrige seulement ces endroits, puis explique-moi le changement.
La table redevient lisible et modifiable par tout le monde avec la clé anon.
Supprimez cette ligne et activez RLS avec des règles par utilisateur.
supabase/migrations/003_orders.sql:2alter table orders disable row level security;
Dans supabase/migrations/003_orders.sql:2 : RLS désactivée sur une table. Supprimez cette ligne et activez RLS avec des règles par utilisateur. Corrige seulement ces endroits, puis explique-moi le changement.
Si une valeur vient de l'utilisateur, il peut lire ou effacer la base (injection SQL).
Utilisez des paramètres (%s, ?, $1) ou l'ORM au lieu de coller les valeurs dans la requête.
src/lib/products.ts:4const res = await pool.query(`SELECT * FROM products WHERE name LIKE '%${q}%'`)
Donnée envoyée par l'utilisateur dans src/app/api/search/route.ts:4, transmise par searchProducts (src/app/api/search/route.ts:5), utilisée ici sans contrôle.
Dans src/lib/products.ts:4 : Requête SQL construite avec du texte de l'utilisateur. Utilisez des paramètres (%s, ?, $1) ou l'ORM au lieu de coller les valeurs dans la requête. Corrige seulement ces endroits, puis explique-moi le changement.
Les clés et mots de passe écrits dans le code (Stripe, AWS, GitHub, GitLab, OpenAI, Anthropic, Hugging Face, SendGrid, Slack, Telegram, Google, jetons npm et PyPI, adresses de base de données avec mot de passe, clés privées, fichiers .env), la clé secrète de l'application écrite en dur, les secrets exposés au navigateur (NEXT_PUBLIC_, VITE_…), la clé service_role de Supabase côté navigateur, les tables Supabase sans RLS ou avec des règles ouvertes (sur toutes les migrations du projet), les règles Firebase ouvertes ou en « mode test », les vues et fonctions Supabase qui contournent RLS, les requêtes SQL et les commandes système construites avec du texte, les requêtes, fichiers et redirections choisis par l'utilisateur (aussi quand la valeur passe par une variable quelques lignes plus haut), les données enregistrées sans choisir les champs, le chargement de données qui peut exécuter du code, les mots de passe hachés en MD5 ou comparés à une valeur fixe, la protection CSRF ou les cookies de session affaiblis, les jetons dans localStorage ou tirés avec Math.random, le debug activé, la vérification TLS ou JWT désactivée, CORS ouvert avec identifiants et le HTML inséré sans nettoyage. Les valeurs d'exemple (your-key, xxxx), les mots de passe locaux par défaut, les commentaires, les tests et les configurations de test ne sont pas signalés, sauf pour les secrets.
Dans un projet, l'analyse note aussi quels paquets sont importés dans le code : une faille dans un paquet que le code n'importe jamais, et dont aucun autre paquet n'a besoin d'après le fichier de verrouillage, descend d'un niveau, avec la raison. Les fichiers de dépendances trouvés (package-lock.json, requirements.txt, composer.lock…) donnent directement une nouvelle version de l'analyse des dépendances.
Le code est lu en mémoire puis oublié : Tamiso garde seulement le nom du fichier, la ligne et un court extrait où les secrets sont masqués. Les dossiers de dépendances et de build (node_modules, dist…) sont ignorés. Une analyse par règles ne remplace pas une revue de sécurité.
Un cookie sans Secure peut partir en clair, sans HttpOnly il est lisible par un script injecté, sans SameSite il part avec les requêtes d'autres sites.
Ajoutez Secure, HttpOnly et SameSite=Lax aux cookies de session.
session : Secure, SameSiteTamiso a trouvé un problème de sécurité sur mon site https://boutique-martin.fr : Cookie sans protections (session : Secure, SameSite). Un cookie sans Secure peut partir en clair, sans HttpOnly il est lisible par un script injecté, sans SameSite il part avec les requêtes d'autres sites. Corrige-le dans le code ou la configuration du projet : Ajoutez Secure, HttpOnly et SameSite=Lax aux cookies de session. Dis-moi ce que tu as changé et ce que je dois régler moi-même chez mon hébergeur.
Sans cet en-tête, le navigateur peut encore ouvrir la version non chiffrée du site.
Ajoutez l'en-tête Strict-Transport-Security: max-age=31536000; includeSubDomains.
Tamiso a trouvé un problème de sécurité sur mon site https://boutique-martin.fr : En-tête Strict-Transport-Security absent (https://boutique-martin.fr). Sans cet en-tête, le navigateur peut encore ouvrir la version non chiffrée du site. Corrige-le dans le code ou la configuration du projet : Ajoutez l'en-tête Strict-Transport-Security: max-age=31536000; includeSubDomains. Dis-moi ce que tu as changé et ce que je dois régler moi-même chez mon hébergeur.
La version http:// ne renvoie pas vers https:// : sur un Wi-Fi public, quelqu'un peut lire ou modifier ce que voit le visiteur.
Activez la redirection automatique vers HTTPS dans les réglages de votre hébergeur.
http://boutique-martin.fr/Tamiso a trouvé un problème de sécurité sur mon site https://boutique-martin.fr : Le site reste accessible sans HTTPS (http://boutique-martin.fr/). La version http:// ne renvoie pas vers https:// : sur un Wi-Fi public, quelqu'un peut lire ou modifier ce que voit le visiteur. Corrige-le dans le code ou la configuration du projet : Activez la redirection automatique vers HTTPS dans les réglages de votre hébergeur. Dis-moi ce que tu as changé et ce que je dois régler moi-même chez mon hébergeur.
Les fichiers .map permettent de reconstruire le code source d'origine, commentaires compris.
Désactivez les source maps en production (par exemple productionBrowserSourceMaps: false, build.sourcemap: false) ou réservez-les à votre outil de suivi d'erreurs.
https://boutique-martin.fr/_next/static/chunks/main.js.mapTamiso a trouvé un problème de sécurité sur mon site https://boutique-martin.fr : Code source publié avec les cartes de source (https://boutique-martin.fr/_next/static/chunks/main.js.map). Les fichiers .map permettent de reconstruire le code source d'origine, commentaires compris. Corrige-le dans le code ou la configuration du projet : Désactivez les source maps en production (par exemple productionBrowserSourceMaps: false, build.sourcemap: false) ou réservez-les à votre outil de suivi d'erreurs. Dis-moi ce que tu as changé et ce que je dois régler moi-même chez mon hébergeur.
Cet en-tête limite les scripts que la page peut charger : il réduit beaucoup l'effet d'une faille XSS.
Ajoutez une politique Content-Security-Policy, en commençant par default-src 'self' puis les domaines dont vous avez besoin.
Tamiso a trouvé un problème de sécurité sur mon site https://boutique-martin.fr : En-tête Content-Security-Policy absent (https://boutique-martin.fr). Cet en-tête limite les scripts que la page peut charger : il réduit beaucoup l'effet d'une faille XSS. Corrige-le dans le code ou la configuration du projet : Ajoutez une politique Content-Security-Policy, en commençant par default-src 'self' puis les domaines dont vous avez besoin. Dis-moi ce que tu as changé et ce que je dois régler moi-même chez mon hébergeur.
Un autre site peut afficher le vôtre en transparence et faire cliquer vos visiteurs à leur insu (clickjacking).
Ajoutez Content-Security-Policy: frame-ancestors 'self' (ou X-Frame-Options: DENY).
Tamiso a trouvé un problème de sécurité sur mon site https://boutique-martin.fr : Le site peut être affiché dans un cadre d'un autre site (https://boutique-martin.fr). Un autre site peut afficher le vôtre en transparence et faire cliquer vos visiteurs à leur insu (clickjacking). Corrige-le dans le code ou la configuration du projet : Ajoutez Content-Security-Policy: frame-ancestors 'self' (ou X-Frame-Options: DENY). Dis-moi ce que tu as changé et ce que je dois régler moi-même chez mon hébergeur.
L'adresse complète des pages (avec ses paramètres) peut partir vers les sites que vos pages appellent.
Ajoutez l'en-tête Referrer-Policy: strict-origin-when-cross-origin.
Tamiso a trouvé un problème de sécurité sur mon site https://boutique-martin.fr : En-tête Referrer-Policy absent (https://boutique-martin.fr). L'adresse complète des pages (avec ses paramètres) peut partir vers les sites que vos pages appellent. Corrige-le dans le code ou la configuration du projet : Ajoutez l'en-tête Referrer-Policy: strict-origin-when-cross-origin. Dis-moi ce que tu as changé et ce que je dois régler moi-même chez mon hébergeur.
Quelqu'un qui trouve une faille ne sait pas à qui l'écrire. Pour un produit vendu dans l'UE, le Cyber Resilience Act demande un contact pour signaler les vulnérabilités.
Publiez /.well-known/security.txt avec au moins une ligne Contact: et une ligne Expires: (RFC 9116).
Tamiso a trouvé un problème de sécurité sur mon site https://boutique-martin.fr : Pas de fichier security.txt (https://boutique-martin.fr). Quelqu'un qui trouve une faille ne sait pas à qui l'écrire. Pour un produit vendu dans l'UE, le Cyber Resilience Act demande un contact pour signaler les vulnérabilités. Corrige-le dans le code ou la configuration du projet : Publiez /.well-known/security.txt avec au moins une ligne Contact: et une ligne Expires: (RFC 9116). Dis-moi ce que tu as changé et ce que je dois régler moi-même chez mon hébergeur.
Chaque analyse cherche aussi les fichiers sensibles (.env, .git, sauvegardes, journaux), le mode debug et les consoles, les outils d'administration, la documentation d'API et GraphQL, les redirections ouvertes, les dossiers listés, les anciennes versions de TLS, security.txt et CORS. Tout se fait en lecture seule sur votre domaine : pas de connexion, pas de formulaire envoyé, aucune donnée modifiée.
Laissez le code de vérification en place : il est contrôlé avant chaque analyse complète.
|
Atelier Lumen
Sécurité de votre application : Boulangerie Martin, boutique-en-lignePréparé pour Claire Martin. Version du 01/11/2026 : 142 paquets analysés. Le code du projet a aussi été analysé.
2 mises à jour prévues
Aucune faille connue n'est exploitée en ce moment contre les composants de votre application. 2 composants ont une faille connue à traiter : nous les mettons à jour d'ici le 15/11/2026. Le code contient une clé secrète à retirer et à remplacer. 2mises à jour à faire
1paquet à vérifier
31failles connues, dont 28 écartées
4problèmes graves dans le code
Ce que nous corrigeons
Ce que nous vérifions
Registre de traitement des vulnérabilitésDélais à partir de la détection : 7 jours pour une faille exploitée activement ou critique, 30 jours pour une gravité élevée, 90 jours pour une gravité moyenne, 180 jours pour une gravité faible.
Ce qui a été vérifiéComposants142 paquets comparés aux bases OSV et FIRST EPSS et au catalogue CISA KEV.
Paquets inventés ou malveillantsUn paquet introuvable sur son registre, souvent inventé par une IA.
Clés et mots de passeUne clé secrète dans le code : à retirer et à remplacer.
Code de l'application3 problèmes graves à corriger (accès aux données, injection ou configuration).
Une faille est écartée quand elle ne concerne pas votre application : partie du composant non utilisée, risque très faible en pratique, ou décision vérifiée par notre équipe. La liste des 28 failles écartées, avec la raison de chacune, est disponible sur demande auprès de Atelier Lumen. Ce rapport ne remplace pas un audit de sécurité. Sources : OSV, FIRST EPSS, CISA KEV (catalogue du makiety), PyPI, npm.
Atelier Lumen
Analyse réalisée avec Tamiso
|
Chaque projet en un coup d'œil : l'état des dépendances et du code, la vérification de chaque jour et l'historique des versions. Voir le détail
Pour essayer
Outils
Pour les créateurs seuls
Outils, en plus de Gratuit
Pour les agences et petites équipes
Outils, en plus de Indie
Pour les éditeurs de logiciels et d'objets connectés
Outils, en plus de Studio
Dans les offres payantes, l'IA fait partie de l'analyse. Elle relit les alertes de votre code et écarte les fausses, vérifie si votre code appelle vraiment la partie vulnérable d'un paquet, explique chaque faille en langage simple et traduit les descriptions des bases. L'offre gratuite analyse avec les bases publiques et nos règles, sans envoyer votre code à un modèle d'IA.
En annuel, 2 mois offerts : Indie 190 €, Studio 590 €, Éditeur 1 490 € HT par an. Les offres payantes ouvrent bientôt : réservez la vôtre, sans paiement aujourd'hui. Pro et Partenaire (consultants, agences, auditeurs) sont sur devis. Réserver une offre