
Kontrolliertes Sicherheitsforschungslabor zur Reproduktion von CVE-2024-1540 (GitHub-Actions-Befehlsinjektion in gradio-app/gradio deploy+test-visual.yml) — abgeflachter Schnappschuss von gradio-app/gradio @ f35f615e33a5dd90bfeb106b6f5dca689849fcef
Automatisiertes Forschungsobjekt – nicht das Upstream-Projekt.
Dieses Repository ist ein Wegwerf-Labor, das von einer automatisierten Testumgebung für eine Masterarbeit an der Université Laval zur Reproduktion veröffentlichter GitHub-Actions-Workflow-Schwachstellen erstellt wurde. Es ist eine wörtliche Momentaufnahme von
gradio-app/gradiobeim Commitf35f615e33a5dd90bfeb106b6f5dca689849fcef(2024-02-09), weiterverbreitet unter der eigenen Lizenz dieses Projekts, deren Datei unverändert in dieser Momentaufnahme enthalten ist.Das Upstream-Projekt ist nicht beteiligt, wird niemals angegriffen, und die hier untersuchte Schwachstelle ist bereits öffentlich bekannt. Jedes Secret und jede Variable in diesem Repository ist ein zufällig generierter Dummy-Wert – es sind keine echten Anmeldedaten vorhanden. Aktionsreferenzen und Runner-Images sind auf den Stand vom 2024-02-09 fixiert; siehe
pinning.mdin der Testumgebungs-Ausgabe für jede an der Momentaufnahme vorgenommene Änderung.Fragen oder Einwände: [email protected]
Gradio ist ein Open-Source-Python-Paket, mit dem Sie schnell eine Demo oder Webanwendung für Ihr Machine-Learning-Modell, Ihre API oder eine beliebige Python-Funktion erstellen können. Anschließend können Sie mit den integrierten Freigabefunktionen von Gradio in nur wenigen Sekunden einen Link zu Ihrer Demo oder Webanwendung teilen. Keine JavaScript-, CSS- oder Webhosting-Kenntnisse erforderlich!
Es braucht nur ein paar Zeilen Python, um eine schöne Demo wie die obige zu erstellen. Also legen wir los 💫
Voraussetzung: Gradio erfordert Python 3.8 oder höher
Wir empfehlen, Gradio mit pip zu installieren, das standardmäßig in Python enthalten ist. Führen Sie dies in Ihrem Terminal oder Ihrer Eingabeaufforderung aus:
pip install gradio
[!TIP] Es ist am besten, Gradio in einer virtuellen Umgebung zu installieren. Detaillierte Installationsanweisungen für alle gängigen Betriebssysteme finden Sie hier.
Sie können Gradio in Ihrem bevorzugten Code-Editor, Jupyter-Notebook, Google Colab oder überall dort ausführen, wo Sie Python schreiben. Schreiben wir Ihre erste Gradio-App:
import gradio as gr
def greet(name, intensity):
return "Hello " * intensity + name + "!"
demo = gr.Interface(
fn=greet,
inputs=["text", "slider"],
outputs=["text"],
)
demo.launch()
[!TIP] Wir kürzen den importierten Namen von
gradiozugr, um die Lesbarkeit des Codes zu verbessern. Dies ist eine weit verbreitete Konvention, der Sie folgen sollten, damit jeder, der mit Ihrem Code arbeitet, ihn leicht verstehen kann.
Führen Sie nun Ihren Code aus. Wenn Sie den Python-Code in einer Datei mit dem Namen z. B. app.py geschrieben haben, führen Sie python app.py im Terminal aus.
Die folgende Demo wird in einem Browser unter http://localhost:7860 geöffnet, wenn sie aus einer Datei ausgeführt wird. Wenn Sie in einem Notebook arbeiten, wird die Demo eingebettet im Notebook angezeigt.

Geben Sie Ihren Namen in das Textfeld links ein, ziehen Sie den Schieberegler und drücken Sie dann die Schaltfläche „Submit". Sie sollten rechts eine freundliche Begrüßung sehen.
[!TIP] Bei der lokalen Entwicklung können Sie Ihre Gradio-App im Hot-Reload-Modus ausführen, der die Gradio-App automatisch neu lädt, wenn Sie Änderungen an der Datei vornehmen. Geben Sie dazu einfach
gradiovor dem Dateinamen ein, stattpython. Im obigen Beispiel würden Sie in Ihrem Terminalgradio app.pyeingeben. Erfahren Sie mehr über Hot Reloading im Hot-Reloading-Leitfaden.
Die Interface-Klasse verstehen
Sie werden feststellen, dass Sie für Ihre erste Demo eine Instanz der gr.Interface-Klasse erstellt haben. Die Interface-Klasse ist dafür konzipiert, Demos für Machine-Learning-Modelle zu erstellen, die einen oder mehrere Eingaben akzeptieren und eine oder mehrere Ausgaben zurückgeben.
Die Interface-Klasse hat drei Kernargumente:
fn: die Funktion, um die eine Benutzeroberfläche (UI) herum erstellt werden sollinputs: die Gradio-Komponente(n), die für die Eingabe verwendet werden. Die Anzahl der Komponenten sollte der Anzahl der Argumente in Ihrer Funktion entsprechen.outputs: die Gradio-Komponente(n), die für die Ausgabe verwendet werden. Die Anzahl der Komponenten sollte der Anzahl der Rückgabewerte Ihrer Funktion entsprechen.Das fn-Argument ist sehr flexibel – Sie können jede Python-Funktion übergeben, die Sie mit einer UI umhüllen möchten. Im obigen Beispiel haben wir eine relativ einfache Funktion gesehen, aber die Funktion könnte alles sein, von einem Musikgenerator über einen Steuerrechner bis hin zur Vorhersagefunktion eines vortrainierten Machine-Learning-Modells.
Die Argumente input und output akzeptieren eine oder mehrere Gradio-Komponenten. Wie wir sehen werden, enthält Gradio mehr als 30 integrierte Komponenten (wie die Komponenten gr.Textbox(), gr.Image() und gr.HTML()), die für Machine-Learning-Anwendungen entwickelt wurden.
[!TIP] Für die Argumente
inputsundoutputskönnen Sie den Namen dieser Komponenten als Zeichenfolge ("textbox") oder eine Instanz der Klasse (gr.Textbox()) übergeben.