Revisar los cambios de código para detectar problemas de seguridad
Revisa las solicitudes de incorporación de cambios y los cambios locales para detectar regresiones de seguridad manualmente o en CI/CD.
Ejecuta una revisión de seguridad de los cambios para detectar regresiones en un conjunto de cambios respaldado por Git. Codex revisa cada archivo modificado similar a código fuente y el código directamente relacionado que lo respalda. No amplía la revisión para convertirla en una auditoría completa del repositorio.
Para analizar un repositorio completo en lugar de un cambio específico, consulta Ejecuta un análisis de seguridad.
Ejecutar una revisión manual
En la aplicación de escritorio, abre Security, selecciona Scans y selecciona + Scan. Elige el repositorio y, luego, selecciona Changes. Revisa los cambios sin confirmar, una solo commit o una revisión base y una revisión principal. Deep scan no está disponible para un análisis de cambios.
También puedes pedir a Codex que revise los cambios sin confirmar en una conversación:
Use $codex-security:security-diff-scan to review my current uncommitted changes for security regressions.Para un commit o un rango de ramas, especifica ambas revisiones cuando sea necesario:
Use $codex-security:security-diff-scan to review the changes from origin/main to HEAD for security regressions. Focus on authentication, authorization, input handling, filesystem access, network requests, and secrets.También puedes indicar una solicitud de incorporación de cambios cuando sus revisiones base y principal estén disponibles en la copia de trabajo local.
Confirmar el cambio en la configuración
- Selecciona Changes.
- Confirma el repositorio cuya copia de trabajo está activa, la rama actual y el commit más reciente.
- En Changes to review, elige:
Uncommitted changespara el árbol de trabajo actual.- El commit más reciente para revisar una solo commit.
- Una revisión base y una revisión principal para un intervalo de ramas o de una solicitud de incorporación de cambios.
- Confirma que el resumen describa el cambio que querías revisar.
- Selecciona Start scan.
Codex no cambia a otra rama ni cambia el árbol de trabajo seleccionado. Si una revisión solicitada no está disponible localmente, descárgala antes de la revisión o proporciona una revisión base y una final disponibles localmente.
Actuar sobre los hallazgos
Después de revisar los resultados, corrige y verifica un hallazgo aceptado o exporta y realiza un seguimiento de los hallazgos.
Automatizar las revisiones en CI/CD
Para la CLI independiente, consulta Ejecuta Codex Security en
CI para obtener JSON estructurado, una política de gravedad y la carga de archivos SARIF.
Continúa con esta sección para invocar la habilidad del plugin instalado
a través de codex exec.
Ejecuta $codex-security:security-diff-scan en CI cuando el ejecutor pueda invocar la
CLI de Codex sin interacción. Primero, instala la CLI sin exponer la credencial del
análisis:
npm install --global @openai/codexInstala el plugin Codex Security en la CLI:
codex plugin add codex-security@openai-curatedEl comando de instalación usa el marketplace público de plugins de la CLI de Codex. Consulta el registro de cambios del plugin para conocer los requisitos específicos de cada versión.
A continuación, proporciona una API key de OpenAI desde el almacén de secretos de CI como
CODEX_SECURITY_API_KEY. Expón la credencial solo para el análisis:
CODEX_API_KEY="$CODEX_SECURITY_API_KEY" codex exec \
--sandbox workspace-write \
"Use \$codex-security:security-diff-scan to review changes from $BASE_REVISION to $HEAD_REVISION for security regressions. Do not modify the checkout."El entorno aislado con permisos de escritura permite que el análisis cree artefactos temporales. El prompt sigue exigiendo que Codex mantenga sin cambios la copia de trabajo del código fuente.
El análisis escribe su salida en
$TMPDIR/codex-security-scans/<repository>/<scan-id>/:
| Archivo | Contenido |
|---|---|
report.md |
Punto de entrada principal legible al directorio completo del análisis. |
findings/<slug>/ |
Informes detallados de vulnerabilidades y archivos de prueba de concepto de respaldo, cuando se soliciten. |
hardening/ |
Recomendaciones de refuerzo estructural y propuestas de respaldo, cuando se soliciten. |
findings.json |
Hallazgos con identificadores estables, gravedad, confianza, ubicaciones en el código fuente y medidas correctivas. Usa estos campos en flujos de trabajo de seguridad o herramientas posteriores. |
scan-manifest.json |
Constancia sellada del análisis con el objetivo revisado, las revisiones y los hashes de los artefactos. |
coverage.json |
Superficies revisadas y pendientes, exclusiones y grado de cobertura. |
Para consultar las definiciones de los campos, consulta el esquema de hallazgos. Usa findingId para identificar el hallazgo y occurrenceId para su aparición
en este análisis.
Por ejemplo, este comando imprime una fila separada por tabulaciones por cada hallazgo:
jq -r '
.findings[] |
[.findingId, .severity.level, .confidence.level, .locations[0].path, .locations[0].startLine, .title] |
@tsv
' findings.jsonEstos ejemplos presuponen un ejecutor Linux de confianza con Node.js y npm, Git, Python
3, jq y las herramientas de línea de comandos del proveedor. El prefijo global de paquetes npm
debe permitir escritura.
Los resultados del análisis pueden incluir detalles confidenciales de vulnerabilidades. Mantén los artefactos privados y revisa el destino y el contenido antes de publicar hallazgos. Elige el ejemplo de tu proveedor de CI:
name: Codex Security review
on:
pull_request:
jobs:
security-review:
if: github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v5
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
persist-credentials: false
- name: Install Codex Security
env:
CODEX_HOME: ${{ runner.temp }}/codex-home
run: |
npm install --global @openai/codex
codex plugin add codex-security@openai-curated
- name: Review code changes
env:
CODEX_SECURITY_API_KEY: ${{ secrets.CODEX_SECURITY_API_KEY }}
CODEX_HOME: ${{ runner.temp }}/codex-home
TMPDIR: ${{ runner.temp }}/codex-security
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_REVISION: ${{ github.event.pull_request.head.sha }}
run: |
BASE_REVISION="$(git merge-base "$BASE_SHA" "$HEAD_REVISION")"
CODEX_API_KEY="$CODEX_SECURITY_API_KEY" codex exec \
--sandbox workspace-write \
"Use \$codex-security:security-diff-scan to review changes from $BASE_REVISION to $HEAD_REVISION for security regressions. Do not modify the checkout."
- uses: actions/upload-artifact@v4
if: always()
with:
name: codex-security-review
path: ${{ runner.temp }}/codex-security/codex-security-scans Crea una variable de CI/CD CODEX_SECURITY_API_KEY enmascarada y revisa los artefactos del análisis
de forma privada antes de compartir los hallazgos.
codex-security-review:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_SOURCE_PROJECT_ID == $CI_PROJECT_ID'
variables:
GIT_DEPTH: "0"
script:
- |
codex_security_api_key="$CODEX_SECURITY_API_KEY"
unset CODEX_SECURITY_API_KEY
export CODEX_HOME="/tmp/codex-home-$CI_JOB_ID"
export TMPDIR="/tmp/codex-security-$CI_JOB_ID"
export BASE_REVISION="$CI_MERGE_REQUEST_DIFF_BASE_SHA"
export HEAD_REVISION="${CI_MERGE_REQUEST_SOURCE_BRANCH_SHA:-$CI_COMMIT_SHA}"
npm install --global @openai/codex
codex plugin add codex-security@openai-curated
CODEX_API_KEY="$codex_security_api_key" codex exec \
--sandbox workspace-write \
"Use \$codex-security:security-diff-scan to review changes from $BASE_REVISION to $HEAD_REVISION for security regressions. Do not modify the checkout."
after_script:
- |
unset CODEX_SECURITY_API_KEY
scan_root="/tmp/codex-security-$CI_JOB_ID/codex-security-scans"
if [ -d "$scan_root" ]; then
tar -czf codex-security-artifacts.tar.gz -C "$scan_root" .
fi
artifacts:
when: always
paths:
- codex-security-artifacts.tar.gz trigger: none
pool:
vmImage: ubuntu-latest
steps:
- checkout: self
fetchDepth: 0
- bash: |
set -euo pipefail
export CODEX_HOME="$AGENT_TEMPDIRECTORY/codex-home"
npm install --global @openai/codex
codex plugin add codex-security@openai-curated
displayName: Install Codex Security
- bash: |
set -euo pipefail
export CODEX_HOME="$AGENT_TEMPDIRECTORY/codex-home"
export TMPDIR="$AGENT_TEMPDIRECTORY/codex-security"
export HEAD_REVISION="$SYSTEM_PULLREQUEST_SOURCECOMMITID"
export BASE_REVISION="$(git merge-base HEAD^1 "$HEAD_REVISION")"
CODEX_API_KEY="$CODEX_SECURITY_API_KEY" codex exec \
--sandbox workspace-write \
"Use \$codex-security:security-diff-scan to review changes from $BASE_REVISION to $HEAD_REVISION for security regressions. Do not modify the checkout."
displayName: Review code changes
condition: and(succeeded(), ne(variables['System.PullRequest.IsFork'], 'True'))
env:
CODEX_SECURITY_API_KEY: $(CODEX_SECURITY_API_KEY)
- publish: $(Agent.TempDirectory)/codex-security/codex-security-scans
artifact: codex-security-review
condition: always()Para Azure Repos, configura una directiva de rama Build validation para ejecutar la canalización en las solicitudes de incorporación de cambios.
pipeline {
agent { label 'linux' }
stages {
stage('Codex Security review') {
when {
allOf {
changeRequest()
expression { !env.CHANGE_FORK?.trim() }
}
}
steps {
sh '''#!/usr/bin/env bash
set -euo pipefail
export CODEX_HOME="/tmp/codex-home-$BUILD_TAG"
export TMPDIR="/tmp/codex-security-$BUILD_TAG"
mkdir -p "$TMPDIR"
git fetch --no-tags origin "$CHANGE_TARGET"
target="$(git rev-parse FETCH_HEAD)"
git fetch --no-tags origin "$CHANGE_BRANCH"
git rev-parse FETCH_HEAD > "$TMPDIR/head"
git merge-base "$target" "$(cat "$TMPDIR/head")" > "$TMPDIR/base"
npm install --global @openai/codex
codex plugin add codex-security@openai-curated
'''
withCredentials([string(credentialsId: 'codex-security-api-key', variable: 'CODEX_SECURITY_API_KEY')]) {
sh '''#!/usr/bin/env bash
set +x
set -euo pipefail
export CODEX_HOME="/tmp/codex-home-$BUILD_TAG"
export TMPDIR="/tmp/codex-security-$BUILD_TAG"
export HEAD_REVISION="$(cat "$TMPDIR/head")"
export BASE_REVISION="$(cat "$TMPDIR/base")"
CODEX_API_KEY="$CODEX_SECURITY_API_KEY" codex exec \
--sandbox workspace-write \
"Use \$codex-security:security-diff-scan to review changes from $BASE_REVISION to $HEAD_REVISION for security regressions. Do not modify the checkout."
'''
}
}
post {
always {
sh '''#!/usr/bin/env bash
set -euo pipefail
scan_root="/tmp/codex-security-$BUILD_TAG/codex-security-scans"
if [ -d "$scan_root" ]; then
tar -czf codex-security-artifacts.tar.gz -C "$scan_root" .
fi
'''
archiveArtifacts artifacts: 'codex-security-artifacts.tar.gz', allowEmptyArchive: true
}
}
}
}
} Los ejemplos omiten las solicitudes de incorporación de cambios provenientes de bifurcaciones. Ejecuta trabajos con credenciales solo desde una
definición de canalización protegida y únicamente para colaboradores de confianza que puedan usar las
credenciales del análisis. Archiva codex-security-scans para conservar juntos los hallazgos estructurados,
el manifiesto, la cobertura y report.md, además de cualquier resultado solicitado de
findings/ o hardening/. Empieza con resultados informativos y revisa
la cobertura y el tiempo de ejecución antes de convertir el trabajo en una comprobación obligatoria.
Para obtener información sobre la gestión de API key y los controles del entorno aislado, consulta el Modo no
interactivo. Si tu organización permite la Codex
GitHub Action, esta puede instalar la CLI durante la ejecución, pero
aun así debes instalar primero el plugin y dirigir la entrada codex-home de la acción al
mismo CODEX_HOME.