This page is in Spanish. Read it in English →
Precio plano por equipo · alojado en la UE · sin IA · gratis en repos públicos

Auditorías de Seguridad Automatizadas en Cada Pull Request.

  • Detección de secretos y vulnerabilidades sin configurar nada. Instalas y el primer informe llega en cerca de un minuto, sobre el código que ya está en tu repositorio. Credenciales, inyección, ajustes inseguros y dependencias de riesgo.
  • Privado y efímero: tu código nunca se escribe en disco y nunca se envía a un modelo de IA ni a ningún tercero. Se lee en un servidor en la UE y se descarta.
  • Arreglos accionables en línea directamente en los comentarios del PR de GitHub: la línea, el motivo y un Commit suggestion de un clic — solo donde el arreglo es seguro.
Instalar en GitHub → Gratis en repos públicos · 14 días gratis en privados

Antes de creerte nada de esto: publicamos cuántas veces nos equivocamos → 46 correcciones, cada una de una línea que marcamos mal en un repositorio público real, y 43 contrapruebas que demuestran que ningún arreglo calló un problema real.

src/lib/payments.tsIlustración
magaudit-agentbotcommented just now

HIGH · Possible secret in 'paymentsApiKey'

Suggested change
-const paymentsApiKey = "pk9Xq2Lr7Tz4…";
+const paymentsApiKey = process.env.PAYMENTS_API_KEY;
Add suggestion to batchCommit suggestion

If this is a real secret, revoke it and read it from an environment variable. If it is an example, use an obvious placeholder such as YOUR_KEY_HERE.

Ilustración de un comentario real: la regla, la gravedad y el arreglo son exactamente los que la App escribe para esta línea (en inglés, como en GitHub).

Un check de seguridad en cada pull request, con un precio plano para todo el equipo. Tu código se lee en un servidor en Finlandia y nunca se envía a un modelo de IA ni a ningún tercero: solo salen nombres y versiones de paquete, hacia los registros de paquetes y sus contadores de descargas.

El check falla cuando encuentra algo grave, así que bloquea el merge en cuanto lo marcas como obligatorio. El primer informe llega cerca de un minuto después de instalar, sobre el código que ya está en tu repositorio.

Empezamos por el código que ya está ahí, porque el fallo que más encontramos no se añade nunca en un pull request. A partir de ahí, cada dependencia que añadas se comprueba por su antigüedad y por si alguien la usa de verdad — el perfil de un paquete que un atacante registró la semana pasada, que se instala sin decir nada y todavía no tiene aviso. Y además credenciales en el código, SQL construido concatenando cadenas, deserialización insegura y salida del modelo pintada como HTML sin filtrar. Los hallazgos llegan como comentario en el pull request, con el fichero, la línea y la corrección.

Esta es la medición que nos hizo construirlo así. Buscamos un fallo concreto —una clave de servicio con prefijo NEXT_PUBLIC_ o VITE_, que el framework entrega al navegador de cada visitante— en 63 pull requests reales de proyectos Next.js y Vite. Apareció cero veces. En el código ya existente de 8 repositorios reales apareció en siete. Se escribe una sola vez, el día que se crea el proyecto, y una herramienta que solo lee diffs no lo va a ver nunca.

Auditamos pull requests públicos cada día para no engañarnos. En más de 1.400 dependencias añadidas por desarrolladores reales no encontramos ningún paquete inventado: el ataque del que todo el mundo escribe es más raro de lo que sugieren los titulares, y preferimos decírtelo a venderte un susto. Lo que sí aparece, en torno a un pull request de cada quince, son credenciales e inyección. Lee la medición, o mira el recuento en vivo.

Pensado para equipos de software y agencias europeas de cinco a veinte desarrolladores que entregan React/Next.js y Python con Copilot, Cursor o Claude — y para quien tiene que explicarle a un cliente dónde va su código. Dónde va tu código →

requirements.txt en vivo · consulta pypi.org
Máximo 25 paquetes · sin registro · no se guarda nada
02 — Con qué nos estás comparando

Dos comparaciones honestas.

GitHub Advanced Security
  • ✓Hace muchísimo más que nosotros. Análisis completo de CodeQL, cientos de patrones de credenciales, push protection, panel de seguridad. Si necesitas todo eso, cómpralo: no somos un sustituto.
  • ✕Se factura por persona. Secret Protection cuesta 19 $ y Code Security 30 $ por committer activo y mes en repositorios privados. Un equipo de diez paga unos 490 $ al mes.
  • ✕Espera a que haya aviso. Busca vulnerabilidades conocidas. Medido sobre los 100 avisos de malware npm más recientes, el 30 % llegó más de un día después de publicarse el paquete, y uno tardó 95 días. Hasta entonces, da el paquete por bueno.
MagSolutionsAI
  • ✓Precio plano por organización. Desde 29 € al mes para todo el equipo, con la gente que haga falta. Sin cuentas por asiento ni sustos en la factura al contratar.
  • ✓Mira la antigüedad y el uso, no solo fallos conocidos. El 95 % de ese malware tenía menos de 30 días cuando llegó el aviso, y un paquete de hace días sin descargas se ve en el registro al instante.
  • ✕Es una herramienta estrecha, a propósito. Cubrimos el puñado de cosas que el código escrito con IA hace mal. No pretendemos ser una plataforma de seguridad completa, y lo decimos.

Socket hace la mitad de las dependencias mejor que nosotros, y es mejor que lo sepas por nosotros que por un buscador. Analiza el comportamiento del paquete —scripts de instalación, acceso a red y a disco, código ofuscado—, cosa que nosotros no hacemos. Su plan gratuito cubre desarrolladores y repositorios ilimitados, hasta 1.000 escaneos al mes, y bloquea dependencias maliciosas automáticamente. Si tu único problema son las dependencias, instala Socket: es gratis.

Donde nos diferenciamos es en el alcance. Socket mira tus dependencias; nosotros miramos la dependencia y el código en el mismo check: credenciales escritas a mano, claves enviadas al navegador, SQL concatenado, deserialización insegura, tus workflows y tu Terraform. Si necesitas las dos mitades en repositorios privados, su plan de pago cuesta 25 $ por desarrollador y mes con un mínimo de cinco; el nuestro es un precio plano para toda la organización. La comparación completa →

Precios tal como aparecían en la página de cada proveedor el 27 de septiembre de 2026.

¿Ya tienes un revisor con IA? Quédatelo. CodeRabbit y Copilot revisan cómo está escrito el código; nosotros somos un check de seguridad que va a su lado, no en su lugar. En repositorios privados, la revisión de seguridad de CodeRabbit en cada pull request solo está en el plan Advanced, a 72 $ por desarrollador y mes; Essentials y Team no la incluyen. Quédate con el plan que tienes y añade MagAudit para la seguridad: precio plano por organización, y tu código no se envía a otro modelo de IA. La comparación completa →

SonarQube Cloud es más barato para un equipo pequeño, y gratis en código privado de hasta 50.000 líneas de código. Además hace calidad de código, que nosotros no. Lo que añadimos es estrecho, y decimos exactamente qué es.

Precios tal como aparecían en la página de cada proveedor el 4 de octubre de 2026.

«¿Y por qué no le pido a Copilot o a Claude que revise el PR?» Hazlo también: ayuda con la lógica. Pero si un paquete se publicó el martes pasado es un dato del registro, no una opinión, y un modelo no puede saberlo. Además supone mandar tu código a un proveedor de IA más — una decisión en la que tus clientes quizá quieran opinar. Otro trabajo, otro modo de fallar.

03 — Por qué no lo ve lo que ya pagas

El paquete peligroso no es el que falta. Es el que empezó a existir el martes.

Un paquete que no existe no es tu problema: pip install falla, el CI se pone en rojo y alguien lo arregla en un minuto. También lo medimos: en 1.778 dependencias añadidas en pull requests públicos reales encontramos cero paquetes inventados, y lo decimos en la portada.

El problema es el contrario. El atacante registró el nombre, así que el paquete sí existe, pip install funciona sin decir nada y ejecuta su script de instalación. Lo único que te salva entonces es un aviso de seguridad — y el aviso todavía no está.

Medimos esa ventana. Con los 100 avisos de malware npm más recientes, comparando la fecha de publicación de cada paquete con la de su aviso:

  • La mediana es de cero días: la mayoría se detecta el mismo día.
  • Pero el 30 % estuvo en el registro más de un día sin ningún aviso, y el caso más largo fueron 95 días.
  • El 95 % tenía menos de 30 días cuando por fin llegó el aviso.

Durante esa ventana, todo escáner basado en CVE da el paquete por bueno, porque de verdad no hay nada que encontrar. Pero el paquete tiene días y casi nadie lo usa, y eso el registro lo dice en cuanto aparece en tu pull request. No esperamos al aviso: marcamos la antigüedad y el uso.

En nuestros barridos de pull requests públicos esa regla salta en torno a una de cada 290 dependencias añadidas por desarrolladores reales, así que no es un bot que grita. Las dos cifras se reproducen con la base de avisos de GitHub y el registro de npm sin fiarse de nosotros.

Escaneo de dependencias convencional
  • ✕Necesita un aviso para saltar. El 30 % de esos avisos llegó más de un día tarde, uno de ellos 95 días. Hasta entonces, el silencio se lee como seguridad.
  • ✕Se factura por desarrollador. La factura crece con cada contratación, y un equipo de diez paga diez puestos.
  • ✕Señala el problema y ahí se queda. «Paquete desconocido», sin decirte qué querías escribir.
MagSolutionsAI
  • ✓Pregunta al registro directamente. Un HTTP 404 no es una heurística: es un hecho, con hora, que puedes reproducir con curl.
  • ✓También pilla los ya reclamados. Existir no basta: un paquete publicado hace 6 días con 40 descargas también salta.
  • ✓Un hecho, no una opinión. El criterio está en qué preguntamos, y ahí es donde nos medimos: auditamos pull requests públicos cada día y publicamos en qué nos equivocamos.
  • ✓Te da el nombre correcto. Cada corrección se verifica contra el registro antes de proponerla. Nunca una conjetura.

Prueba esta mitad gratis, como un paso de CI. La comprobación de dependencias también es una GitHub Action: añade uses: MagSolutionsAI/dependency-check@v1 a un workflow que se ejecute en los pull requests. Corre en tu propio runner, así que tu código no sale de él; sin cuenta y sin instalar la App. Marca los paquetes que no existen y los publicados hace días casi sin usuarios, en las líneas que añade el pull request. En el Marketplace de GitHub → · Instalación y código

Medido antes de publicarla, el 28 de septiembre de 2026: en 44 pull requests públicos reales que añadían 305 dependencias extrajo las mismas que la App y no dio ninguna falsa alarma. La muestra no tenía ningún paquete malicioso, así que mide el ruido, no la detección. No propone el nombre correcto ni mira tu código; eso es la App.

04 — Por qué preguntamos al registro y no a un modelo

Pregúntale a tu IA si estos paquetes existen.

Se subieron a PyPI hace unos minutos. Copia cualquiera y pregúntale a Copilot, Claude o ChatGPT si el paquete es real. No puede saberlo: todo modelo tiene fecha de corte de entrenamiento y estos se publicaron después de todas ellas. Nosotros no deducimos que existan. Se lo preguntamos al registro.

  • Cargando los paquetes más recientes de PyPI…

En vivo desde pypi.org, cada cinco minutos. Si la lista sale vacía es que la consulta falló, y preferimos no enseñar nada antes que inventarnos un nombre.

05 — Una vez al instalar, y luego en cada pull request

Siete puertas. Una instalación. Cero configuración.

Las mismas puertas se ejecutan dos veces: sobre el código que ya está en el repositorio en el momento de instalar, y después sobre cada pull request antes del merge. Los hallazgos llegan como comentario en el PR, con el fichero exacto, la línea, por qué importa y cómo se arregla. Nadie de tu equipo instala nada.

La pasada de instalación es a propósito más estrecha: un diff te dice quién escribió una línea y cuándo, un fichero entero no. Informa de credenciales y de la frontera del navegador, y se calla las heurísticas que necesitan ese contexto. La ajustamos después de ejecutarla contra nuestro propio repositorio y obtener 15 hallazgos, 13 de ellos ruido.

404

Dependencias fantasma

Cada dependencia añadida se resuelve contra PyPI y npm en vivo. Si no aparece, o es una alucinación de la IA o es un nombre libre que un atacante todavía puede registrar. Se marca como crítico, con la respuesta del registro y la hora, para que puedas reproducirlo.

<90d

Recién reclamados

El caso peligroso: sí existe. Publicado hace días, casi sin descargas — el perfil exacto de un slopsquat ya reclamado. Comprobar que existe no lo pilla. Nosotros sí.

8

Credenciales en el código

Ocho formatos de clave, con entropía de Shannon y supresión de falsos positivos. Los emails, las llamadas a os.getenv() y las anotaciones de tipo no lo disparan.

LLM01/05

Fallos propios de la IA

Los bugs que solo salen en código escrito con IA: salida del modelo metida en dangerouslySetInnerHTML, claves de servidor publicadas en variables NEXT_PUBLIC_, sumideros de inyección de prompt.

A03

Inyección clásica y valores peligrosos por defecto

Lo que la IA escribe sin pensar: SQL construido interpolando, shell=True con variables, pickle.load sobre datos ajenos, verify=False desactivando TLS. Una consulta correctamente parametrizada no se marca: nos equivocamos una vez, lo corregimos, y la prueba que lo demuestra está en el repositorio.

CVE

Vulnerabilidades ya publicadas

La versión que fija este pull request, contrastada con la base de avisos de GitHub, y la versión parcheada en la línea del arreglo. Solo lo afirmamos cuando la línea fija una versión exacta y el rango afectado se puede comparar sin adivinar: un rango como >=2.0 no dice qué se va a instalar, así que preferimos callarnos antes que suponer.

IaC

La configuración también es código

Dockerfiles, docker-compose, workflows de GitHub Actions, Terraform y Kubernetes. Incluido el fallo caro que casi nadie mira: pull_request_target combinado con hacer checkout de la rama de quien abrió el PR, que ejecuta código de un desconocido con los secretos y los permisos de escritura de tu repositorio. Con el disparador pull_request normal nos callamos: eso es correcto y lo hace todo el mundo.

Y donde el arreglo no es discutible, llega escrito. El hallazgo aparece sobre la línea con un bloque suggestion y el botón Commit suggestion: verify=False pasa a verify=True, una versión vulnerable pasa a la que el propio aviso declara parcheada, una acción sin fijar pasa al SHA real con la etiqueta en un comentario, una clave escrita a mano pasa a leerse del entorno. Aquí ser deterministas es la ventaja: un revisor basado en un modelo tiene que inventar el parche. Nosotros lo derivamos — y donde no se puede derivar, no proponemos ninguno. Ni elegir un UID por ti, ni parches que necesitan una segunda línea, ni nada en un lenguaje donde no sabríamos escribirlo bien. Un parche equivocado sobre código de seguridad lleva nuestra firma y un botón que invita a aplicarlo sin leerlo.

El mismo detector corre en tu máquina antes de hacer push: python tools/magaudit.py --staged. Devuelve 1 si hay algo grave, 2 si hay algo, 0 si está limpio — para un hook de pre-commit o para tu propio CI. Es literalmente el mismo código que corre en el pull request, y existe una prueba cuyo único fin es impedir que los dos diverjan: un escáner local que no coincide con el de CI hace que dejes de creerte los dos.

05b — Lo segundo que pregunta todo equipo

¿Y cuándo nos equivocamos con tu código?

Todo escáner se equivoca alguna vez. Lo que decide si un equipo lo conserva es qué pasa después — y la respuesta habitual es «abre un ticket, o desinstala». Tres salidas, y ninguna exige esperarnos:

Responder al comentario

Cada hallazgo lleva un identificador corto. @magaudit ignorar a1b2c3d4 en el pull request, o @magaudit ignorar regla VULN-EVAL para todos. Contestamos con un 👍, no con otro comentario. Solo pueden hacerlo dueños, miembros y colaboradores del repositorio: cualquiera puede comentar en un PR público, y si eso apagara el detector, apagarlo sería el primer paso de un ataque.

Un fichero que revisa tu equipo

Un .magaudit.yml opcional: rutas a excluir, reglas a desactivar, una severidad mínima. Vive en tu repositorio y se cambia por pull request como cualquier otra cosa, así que todo el equipo ve qué se está silenciando y quién lo decidió.

El marcador que ya usas

¿Vienes de otro escáner? Respetamos sus anotaciones: pragma: allowlist secret, nosec, nosemgrep, gitleaks:allow, trufflehog:ignore, NOSONAR. Ya contestaste a la pregunta; no vamos a hacerte contestarla dos veces.

Y decimos qué hemos ocultado

Lo que tu configuración silencia se sigue contando y se sigue declarando en el comentario, con el motivo de cada uno. Una herramienta que se calla sin decirte cuánto se ha callado no es una herramienta fiable — y menos el día que tu propia exclusión tape algo real.

Lo que no haremos: reescribir un informe ya publicado. Un silenciado vale desde la siguiente auditoría. Hacer desaparecer un hallazgo de seguridad ya emitido es exactamente lo que querría quien acaba de subir una credencial, y no lo ofrecemos ni al dueño del repositorio.

06 — Verifícanos como te verificamos

Todo lo que dice esta página se puede comprobar.

Somos un proveedor de seguridad pidiéndote acceso a tus repositorios. No deberías creernos nada — por eso hemos hecho que no haga falta.

Reproducible

Cada hallazgo de dependencia lleva la consulta exacta al registro, el código HTTP y la hora. Lanza tú el curl — o el hallazgo se reproduce, o no.

Nada escrito en disco

El diff se analiza en memoria y nunca se escribe en disco. El informe enlazado desde el pull request conserva la línea marcada en memoria hasta siete días, y después desaparece. Guardamos ID de instalación, nombre del repo, número de PR y nivel de riesgo — nunca tu código ni el valor de un secreto.

Sin terceros

De nuestro servidor solo salen nombres de paquete (y, para el aviso de vulnerabilidades, la versión fijada), hacia PyPI y npm (pypi.org, registry.npmjs.org), sus contadores de descargas (api.npmjs.org, y pypistats.org para paquetes de Python de menos de 90 días) y la base de avisos de GitHub (api.github.com). Esa es la lista completa. Ningún modelo de IA ve tu código. Sin analítica de terceros, sin rastreadores, sin CDN de fuentes.

Infraestructura en la UE

Alojado en Finlandia. Webhooks verificados con HMAC-SHA256 sobre TLS 1.2+. Notificación de brechas en 72 horas según el RGPD. Confianza y seguridad →

Lo que no vamos a fingir

No tenemos logos de clientes que enseñarte, porque todavía no tenemos clientes. Este producto salió en julio de 2026. Todo lo de arriba es una propiedad del código, no un testimonio — y todo se puede verificar en el informe que la App genera sobre tus propios pull requests. Cuando haya referencias, aparecerán aquí con nombre y apellidos. Hasta entonces, el plan gratuito y el escáner del principio de la página son el argumento entero.

Antes de instalar

Dónde va tu código, quién lo toca y qué debe saber tu revisión de proveedores.

Cada organización que trata datos por cuenta nuestra, qué recibe cada una, cuánto guardamos y las certificaciones que no tenemos, en una sola página.

Confianza y seguridad →

Una instalación. Todos los pull requests de la organización.

Gratis para repositorios públicos, siempre. Los privados: 14 días gratis y después un plan desde 29 € al mes para toda la organización. Sin SDK, sin cambios en el pipeline de CI, sin instalar nada en cada máquina. Desinstalar es un clic y retira todos los accesos.

Lo que esto no es. Una herramienta de análisis estático automatizado y una ayuda a la revisión — no una garantía de seguridad. Analiza las líneas añadidas en cada pull request y, una vez al instalar, una muestra limitada del código que ya existe (hasta 5 repositorios, 40 ficheros en cada uno) — no todo tu código, ni tu infraestructura, ni el comportamiento en ejecución. Busca patrones, así que no encuentra fallos de lógica. Las comprobaciones contra el registro reflejan un momento concreto — un paquete que hoy no existe puede registrarlo un atacante minutos después. La ausencia de hallazgos no significa que tu código sea seguro. Cada hallazgo lleva su ubicación exacta precisamente para que una persona pueda verificarlo.