Skip to main content

Trabajar con protección de inserción desde la línea de comandos

Obtén información sobre las opciones para desbloquear la inserción desde la línea de comandos en GitHub si secret scanning detecta un secreto en los cambios.

¿Quién puede utilizar esta característica?

Secret scanning alerts for partners runs automatically on public repositories and public npm packages to notify service providers about leaked secrets on GitHub.

Secret scanning alerts for users are available for public repositories for free. Organizations using GitHub Enterprise Cloud with a license for GitHub Advanced Security can also enable secret scanning alerts for users on their private and internal repositories. For more information, see "About secret scanning alerts" and "About GitHub Advanced Security."

For information about how you can try GitHub Enterprise with GitHub Advanced Security for free, see "Setting up a trial of GitHub Enterprise Cloud" and "Setting up a trial of GitHub Advanced Security" in the GitHub Enterprise Cloud documentation.

Acerca de la protección de inserción desde la línea de comandos

La protección de inserción impide que los secretos se confirmen accidentalmente en un repositorio mediante el bloqueo de las inserciones que contienen secretos admitidos.

Al intentar insertar un secreto admitido desde la línea de comandos en un repositorio protegido por la protección de inserción, GitHub bloqueará la inserción.

Debes hacer una de estas cosas:

En la línea de comandos se mostrarán hasta cinco secretos detectados a la vez. Si ya se ha detectado un secreto determinado en el repositorio y ya existe una alerta, GitHub no bloqueará ese secreto.

Si confirma que un secreto es real y que pretende corregirlo más adelante, debe intentar corregirlo lo antes posible. Por ejemplo, podría revocar el secreto y quitarlo del historial de confirmaciones del repositorio. Los secretos reales que se han expuesto deben revocarse para evitar el acceso no autorizado. Puede considerar la posibilidad de rotar primero el secreto antes de revocarlo. Para obtener más información, vea «Eliminación de datos confidenciales de un repositorio».

Notas:

  • Si su configuración de Git admite inserciones en varias ramas y no solo en la actual, es posible que se bloquee la inserción debido a que se insertan referencias adicionales y no deseadas. Para obtener más información, consulta las opciones push.default en la documentación de Git.
  • Si se agota el tiempo de espera de secret scanning tras una inserción, GitHub todavía examinará las confirmaciones en busca de secretos después de la inserción.

Resolución de una inserción bloqueada

Para resolver una inserción bloqueada, debes quitar el secreto de todas las confirmaciones en las que aparece.

Note

Para obtener información sobre cómo resolver una confirmación bloqueada en la interfaz de usuario de GitHub, consulta "Trabajar con protección de inserción en la interfaz de usuario de GitHub".

Eliminación de un secreto introducido por la confirmación más reciente en la rama

Si el secreto bloqueado se introdujo con la confirmación más reciente en la rama, puedes seguir las instrucciones a continuación.

  1. Quita el secreto del código.
  2. Para confirmar los cambios, ejecute git commit --amend. Esto actualiza la confirmación original que introdujo el secreto en lugar de crear una nueva confirmación.
  3. Envía los cambios con git push.

Eliminación de un secreto introducido por una confirmación anterior en la rama

También puedes quitar el secreto si aparece en una confirmación anterior en el historial de Git. Para ello, deberá identificar qué confirmación introdujo primero el secreto y modificar el historial de confirmaciones con una fusión mediante cambio de base interactiva.

  1. Examine el mensaje de error que se muestra al intentar insertar la rama, que enumera todas las confirmaciones que contienen el secreto.

    remote:   —— GitHub Personal Access Token ——————————————————————
    remote:    locations:
    remote:      - commit: 8728dbe67
    remote:        path: README.md:4
    remote:      - commit: 03d69e5d3
    remote:        path: README.md:4
    remote:      - commit: 8053f7b27
    remote:        path: README.md:4
    
  2. A continuación, ejecute git log para ver un historial completo de todas las confirmaciones de la rama, junto con sus marcas de tiempo correspondientes.

    test-repo (test-branch)]$ git log
    commit 8053f7b27 (HEAD -> main)
    Author: Octocat <1000+octocat@users.noreply.github.com
    Date:   Tue Jan 30 13:03:37 2024 +0100
    
      my fourth commit message
    
    commit 03d69e5d3
    Author: Octocat <1000+octocat@users.noreply.github.com>
    Date:   Tue Jan 30 13:02:59 2024 +0100
    
      my third commit message
    
    commit 8728dbe67
    Author: Octocat <1000+octocat@users.noreply.github.com
    Date:   Tue Jan 30 13:01:36 2024 +0100
    
      my second commit message
    
    commit 6057cbe51
    Author: Octocat <1000+octocat@users.noreply.github.com
    Date:   Tue Jan 30 12:58:24 2024 +0100
    
      my first commit message
    
    
  3. Focusing only on the commits that contain the secret, use the output of git log to identify which commit comes earliest in your Git history.

    • In the example, commit 8728dbe67 was the first commit to contain the secret.
  4. Start an interactive rebase with git rebase -i <COMMIT-ID>~1.

    • For <COMMIT-ID>, use the commit identified in step 3. For example, git rebase -i 8728dbe67~1.
  5. In the editor, choose to edit the commit identified in step 3 by changing pick to edit on the first line of the text.

    edit 8728dbe67 my second commit message
    pick 03d69e5d3 my third commit message
    pick 8053f7b27 my fourth commit message
    
  6. Ahora, guarde y cierre el editor; esto comenzará la fusión mediante cambio de base interactiva.

  7. Quita el secreto del código.

  8. Confirme los cambios con git commit --amend.

  9. Ejecuta git rebase --continue para finalizar la fusión mediante cambio de base.

  10. Envía los cambios con git push.

Omisión de la protección de inserción

Si GitHub bloquea un secreto que cree que es seguro insertar, puede omitir el bloque especificando un motivo para permitir que se inserte el secreto.

Cuando permites la inserción de un secreto, se crea una alerta en la pestaña Seguridad. GitHub cierra la alerta y no envía una notificación si especificas que el secreto es un falso positivo o que solo se usa en las pruebas. Si especificas que el secreto es real y lo corregirás más adelante, GitHub mantiene abierta la alerta de seguridad y envía notificaciones al creador de la confirmación, así como a los administradores del repositorio. Para obtener más información, vea «Administración de alertas del examen de secretos».

Cuando un colaborador omite un bloque de protección de inserción para un secreto, GitHub también envía una alerta por correo electrónico a los propietarios de la organización, los administradores de seguridad y los administradores de repositorios que han optado por recibir notificaciones por correo electrónico.

Si no ve la opción de omitir el bloque es porque el administrador del repositorio o el propietario de la organización ha configurado controles más estrictos en torno a la protección de inserción. En su lugar, debe eliminar el secreto de la confirmación o enviar una solicitud de "privilegios de omisión" para insertar el secreto bloqueado. Para obtener más información, consulta "Solicitud de privilegios de omisión" en la documentación de GitHub Enterprise Cloud.

  1. Visite la dirección URL devuelta por GitHub cuando se bloquee la inserción.

  2. Elija la opción que mejor describa por qué debería poder insertar el secreto.

    • Si el secreto solo se usa en pruebas y no supone ninguna amenaza, haga clic en Se usa en las pruebas.
    • Si la cadena detectada no es un secreto, haga clic en Es un falso positivo.
    • Si el secreto es real, pero piensa corregirlo más adelante, haga clic en Lo corregiré más adelante.

    Nota: Debe especificar un motivo para omitir la protección de inserción si el repositorio tiene habilitado el examen de secretos.

    Al insertar en un repositorio público que no tiene habilitado el análisis de secretos, todavía está protegido de la inserción accidental de secretos gracias a la protección de inserción para usuarios, que está activado de manera predeterminada para su cuenta de usuario.

    Con la protección de inserción para usuarios, GitHub bloqueará automáticamente las inserciones en repositorios públicos si estas inserciones contienen secretos admitidos, pero no es necesario especificar un motivo para permitir el secreto y GitHub no generará una alerta. Para obtener más información, vea «Protección de inserción para usuarios».

  3. Haga clic en Permitirme insertar este secreto.

  4. Vuelva a intentar la inserción en la línea de comandos en un plazo de tres horas. Si no ha realizado la inserción en un plazo de tres horas, tendrá que repetir este proceso.

Información adicional