
Laboratoire de recherche en sécurité reproduisant CVE-2023-6572 (GHSA-gqvf-3hgp-5hxv) : injection de commandes dans la gestion de workflow_run de gradio-app/gradio pour generate-changeset.yml
Artefact de recherche automatisé — pas le projet en amont.
Ce dépôt est un laboratoire jetable construit par un harnais automatisé pour un mémoire de maîtrise à l'Université Laval sur la reproduction de vulnérabilités publiées dans les workflows GitHub Actions. Il s'agit d'un instantané verbatim de
gradio-app/gradioau commit1d986217f6f4fc1829e528d2afe365635788204f(2023-11-03), redistribué sous la licence propre de ce projet, dont le fichier est inclus inchangé dans cet instantané.Le projet en amont n'est pas impliqué, n'est jamais ciblé, et la vulnérabilité étudiée ici est déjà publique. Chaque secret et variable dans ce dépôt est une valeur factice générée aléatoirement — aucun identifiant réel n'est présent. Les références d'actions et les images d'exécuteur sont épinglées à ce qu'elles résolvaient le 2023-11-03 ; voir
pinning.mddans la sortie du harnais pour chaque modification apportée à l'instantané.Questions ou objections : [email protected]
Créez et partagez facilement de superbes applications d'apprentissage automatique
Site web | Documentation | Guides | Pour commencer | Exemples | 中文
Gradio est une bibliothèque Python open-source utilisée pour créer des démos et des applications web d'apprentissage automatique et de science des données.
Avec Gradio, vous pouvez rapidement créer une belle interface utilisateur autour de vos modèles d'apprentissage automatique ou de votre flux de travail de science des données et permettre aux gens de « l'essayer » en glissant-déposant leurs propres images, en collant du texte, en enregistrant leur propre voix et en interagissant avec votre démo, le tout via le navigateur.

Gradio est utile pour :
Présenter vos modèles d'apprentissage automatique à des clients/collaborateurs/utilisateurs/étudiants.
Déployer vos modèles rapidement avec des liens partageables automatiques et obtenir des retours sur les performances du modèle.
Déboguer votre modèle de manière interactive pendant le développement à l'aide d'outils de manipulation d'entrée intégrés.
Prérequis : Gradio nécessite Python 3.8 ou supérieur, c'est tout !
L'une des meilleures façons de partager votre modèle d'apprentissage automatique, votre API ou votre flux de travail de science des données avec d'autres est de créer une application interactive qui permet à vos utilisateurs ou collègues d'essayer la démo dans leur navigateur.
Gradio vous permet de créer des démos et de les partager, tout en Python. Et généralement en quelques lignes de code seulement ! Alors commençons.
Pour faire fonctionner Gradio avec un simple exemple « Bonjour, le monde », suivez ces trois étapes :
1. Installez Gradio avec pip :
pip install gradio
2. Exécutez le code ci-dessous comme script Python ou dans un Jupyter Notebook (ou Google Colab) :
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()
Nous raccourcissons le nom importé en gr pour une meilleure lisibilité du code utilisant Gradio. C'est une convention largement adoptée que vous devriez suivre afin que quiconque travaille avec votre code puisse le comprendre facilement.
3. La démo ci-dessous apparaîtra automatiquement dans le Jupyter Notebook, ou s'ouvrira dans un navigateur sur http://localhost:7860 si elle est exécutée depuis un script :

Lors d'un développement local, si vous souhaitez exécuter le code comme script Python, vous pouvez utiliser la CLI Gradio pour lancer l'application en mode rechargement, ce qui offrira un développement fluide et rapide. Apprenez-en plus sur le rechargement dans le Guide de rechargement automatique.
gradio app.py
Remarque : vous pouvez aussi faire python app.py, mais cela ne fournira pas le mécanisme de rechargement automatique.
InterfaceVous remarquerez que pour créer la démo, nous avons créé un gr.Interface. Cette classe Interface peut envelopper n'importe quelle fonction Python avec une interface utilisateur. Dans l'exemple ci-dessus, nous avons vu une fonction simple basée sur du texte, mais la fonction pourrait être n'importe quoi, d'un générateur de musique à un calculateur d'impôts en passant par la fonction de prédiction d'un modèle d'apprentissage automatique pré-entraîné.
La classe centrale Interface est initialisée avec trois paramètres requis :
fn : la fonction à envelopper avec une interface utilisateurinputs : le(s) composant(s) à utiliser pour l'entrée (par ex. "text", "image" ou "audio")outputs : le(s) composant(s) à utiliser pour la sortie (par ex. "text", "image" ou "label")Examinons de plus près ces composants utilisés pour fournir l'entrée et la sortie.
Nous avons vu quelques composants Textbox simples dans les exemples précédents, mais que faire si vous voulez changer l'apparence ou le comportement des composants de l'interface utilisateur ?
Disons que vous voulez personnaliser le champ de saisie de texte — par exemple, le rendre plus grand et avec un texte d'espace réservé. Si nous utilisons la classe réelle pour Textbox au lieu du raccourci sous forme de chaîne, vous avez accès à beaucoup plus de personnalisation grâce aux attributs des composants.
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(
fn=greet,
inputs=gr.Textbox(lines=2, placeholder="Name Here..."),
outputs="text",
)
demo.launch()
