
Laboratorio de investigación en seguridad que reproduce CVE-2023-6572 (GHSA-gqvf-3hgp-5hxv): inyección de comandos en el manejo de workflow_run de gradio-app/gradio en generate-changeset.yml
Artefacto de investigación automatizado — no es el proyecto original.
Este repositorio es un laboratorio desechable construido por un sistema automatizado para una tesis de maestría en la Université Laval sobre la reproducción de vulnerabilidades publicadas en flujos de trabajo de GitHub Actions. Es una instantánea verbatim de
gradio-app/gradioen el commit1d986217f6f4fc1829e528d2afe365635788204f(2023-11-03), redistribuida bajo la licencia del propio proyecto, cuyo archivo se incluye sin cambios en esta instantánea.El proyecto original no está involucrado, nunca es el objetivo, y la vulnerabilidad estudiada aquí ya es pública. Cada secreto y variable en este repositorio es un valor ficticio generado aleatoriamente — no hay ninguna credencial real. Las referencias de acciones e imágenes de ejecutores están fijadas a lo que resolvieron el 2023-11-03; consulta
pinning.mden la salida del sistema para cada cambio realizado en la instantánea.Preguntas u objeciones: [email protected]
Crea y comparte aplicaciones de aprendizaje automático encantadoras fácilmente
Sitio web | Documentación | Guías | Primeros pasos | Ejemplos | 中文
Gradio es una biblioteca de Python de código abierto que se utiliza para crear demos y aplicaciones web de aprendizaje automático y ciencia de datos.
Con Gradio, puedes crear rápidamente una interfaz de usuario atractiva alrededor de tus modelos de aprendizaje automático o flujos de trabajo de ciencia de datos y permitir que las personas "lo prueben" arrastrando y soltando sus propias imágenes, pegando texto, grabando su propia voz e interactuando con tu demo, todo a través del navegador.

Gradio es útil para:
Demostrar tus modelos de aprendizaje automático a clientes/colaboradores/usuarios/estudiantes.
Desplegar tus modelos rápidamente con enlaces compartibles automáticos y obtener comentarios sobre el rendimiento del modelo.
Depurar tu modelo de forma interactiva durante el desarrollo utilizando herramientas integradas de manipulación de entradas.
Requisito previo: Gradio requiere Python 3.8 o superior, ¡eso es todo!
Una de las mejores formas de compartir tu modelo de aprendizaje automático, API o flujo de trabajo de ciencia de datos con otros es crear una aplicación interactiva que permita a tus usuarios o colegas probar la demo en sus navegadores.
Gradio te permite crear demos y compartirlas, todo en Python. ¡Y normalmente en solo unas pocas líneas de código! Así que empecemos.
Para poner Gradio en funcionamiento con un ejemplo simple de "Hola, mundo", sigue estos tres pasos:
1. Instala Gradio usando pip:
pip install gradio
2. Ejecuta el código siguiente como un script de Python o en un Jupyter Notebook (o Google Colab):
import gradio as gr
def greet(name):
return "Hello " + name + "!"
demo = gr.Interface(fn=greet, inputs="text", outputs="text")
demo.launch()
Abreviemos el nombre importado a gr para una mejor legibilidad del código que usa Gradio. Esta es una convención ampliamente adoptada que deberías seguir para que cualquiera que trabaje con tu código pueda entenderlo fácilmente.
3. La demo siguiente aparecerá automáticamente dentro del Jupyter Notebook, o se abrirá en un navegador en http://localhost:7860 si se ejecuta desde un script:

Cuando desarrolles localmente, si quieres ejecutar el código como un script de Python, puedes usar la CLI de Gradio para lanzar la aplicación en modo de recarga, que proporcionará un desarrollo fluido y rápido. Aprende más sobre la recarga en la Guía de recarga automática.
gradio app.py
Nota: también puedes hacer python app.py, pero no proporcionará el mecanismo de recarga automática.
InterfaceNotarás que para crear la demo, creamos un gr.Interface. Esta clase Interface puede envolver cualquier función de Python con una interfaz de usuario. En el ejemplo anterior, vimos una función simple basada en texto, pero la función podría ser cualquier cosa, desde un generador de música hasta una calculadora de impuestos o la función de predicción de un modelo de aprendizaje automático preentrenado.
La clase principal Interface se inicializa con tres parámetros obligatorios:
fn: la función alrededor de la cual envolver una interfaz de usuarioinputs: qué componente(s) usar para la entrada (por ejemplo, "text", "image" o "audio")outputs: qué componente(s) usar para la salida (por ejemplo, "text", "image" o "label")Echemos un vistazo más de cerca a estos componentes utilizados para proporcionar entrada y salida.
Vimos algunos componentes simples Textbox en los ejemplos anteriores, pero ¿qué pasa si quieres cambiar cómo se ven o se comportan los componentes de la interfaz de usuario?
Digamos que quieres personalizar el campo de texto de entrada — por ejemplo, que sea más grande y tenga un texto de marcador de posición. Si usamos la clase real de Textbox en lugar del atajo de cadena, tienes acceso a mucha más personalización a través de los atributos del componente.
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()
