Rever alterações de código quanto à segurança
Reveja pull requests e alterações locais quanto a regressões de segurança, manualmente ou em CI/CD.
Execute uma revisão de segurança de alterações para encontrar regressões num conjunto de alterações gerido por Git. O Codex revê cada ficheiro alterado semelhante a código-fonte e o respetivo código de suporte direto. Não expande a revisão para uma auditoria completa do repositório.
Para analisar um repositório inteiro em vez de uma alteração específica, consulte Executar uma análise de segurança.
Executar uma revisão manual
Na aplicação para computador, abra Security, selecione Scans e selecione + Scan. Escolha o repositório e, em seguida, selecione Changes. Reveja alterações por confirmar, um único commit ou uma revisão de base e de destino. Deep scan não está disponível para uma análise de alterações.
Também pode pedir ao Codex para rever alterações por confirmar numa conversa:
Use $codex-security:security-diff-scan to review my current uncommitted changes for security regressions.Para um commit ou intervalo de branches, especifique ambas as revisões quando necessário:
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.Também pode indicar um pull request quando as respetivas revisões de base e de destino estiverem disponíveis no checkout local.
Confirmar a alteração na configuração
- Selecione Changes.
- Confirme o repositório com checkout efetuado, a branch atual e o commit mais recente.
- Em Changes to review, escolha:
Uncommitted changespara a árvore de trabalho atual.- O commit mais recente para uma revisão de um único commit.
- Uma revisão de base e de destino para um intervalo de branch ou pull request.
- Confirme que o resumo descreve a alteração que pretendia rever.
- Selecione Start scan.
O Codex não muda para outra branch nem troca a árvore de trabalho selecionada. Se uma revisão solicitada não estiver disponível localmente, obtenha-a antes da revisão ou forneça uma revisão base e uma revisão de topo disponíveis localmente.
Atuar sobre as conclusões
Depois de rever os resultados, corrija e verifique uma deteção aceite ou exporte e acompanhe as deteções.
Automatizar revisões em CI/CD
Para a CLI autónoma, consulte Executar o Codex Security em
CI para obter JSON estruturado, uma política de gravidade e carregamento de SARIF.
Continue nesta secção para invocar a skill do plugin instalado
através de codex exec.
Execute $codex-security:security-diff-scan em CI quando o executor conseguir invocar a
CLI do Codex sem interação. Primeiro, instale a CLI sem expor a credencial da
análise:
npm install --global @openai/codexInstale o plugin Codex Security na CLI:
codex plugin add codex-security@openai-curatedO comando de instalação utiliza o marketplace público de plugins da CLI do Codex. Consulte o registo de alterações do plugin para conhecer os requisitos específicos de cada versão.
Em seguida, forneça uma API key da OpenAI a partir do armazenamento de segredos de CI como
CODEX_SECURITY_API_KEY. Exponha a credencial apenas durante a análise:
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."O sandbox com permissão de escrita permite que a análise crie artefactos temporários. O prompt continua a exigir que o Codex mantenha inalterada a cópia de trabalho do código-fonte.
A análise escreve os resultados em
$TMPDIR/codex-security-scans/<repository>/<scan-id>/:
| Ficheiro | Conteúdo |
|---|---|
report.md |
Ponto de entrada principal legível para o diretório completo da análise. |
findings/<slug>/ |
Relatórios detalhados de vulnerabilidades e ficheiros de prova de conceito de apoio, quando solicitados. |
hardening/ |
Orientações de reforço estrutural e propostas de apoio, quando solicitadas. |
findings.json |
Deteções com identificadores estáveis, gravidade, confiança, localizações no código-fonte e medidas de correção. Utilize estes campos em fluxos de trabalho de segurança ou ferramentas subsequentes. |
scan-manifest.json |
Comprovativo selado da análise com o alvo revisto, as revisões e os hashes dos artefactos. |
coverage.json |
Superfícies revistas e adiadas, exclusões e grau de completude da cobertura. |
Para obter as definições dos campos, consulte o esquema das deteções. Utilize findingId para identificar a deteção e occurrenceId para a respetiva ocorrência
nesta análise.
Por exemplo, este comando imprime uma linha separada por tabulações para cada conclusão:
jq -r '
.findings[] |
[.findingId, .severity.level, .confidence.level, .locations[0].path, .locations[0].startLine, .title] |
@tsv
' findings.jsonEstes exemplos pressupõem um executor Linux fidedigno com Node.js e npm, Git, Python
3, jq e as ferramentas de linha de comandos do fornecedor. O prefixo global de pacotes npm
tem de permitir escrita.
Os resultados da análise podem incluir detalhes sensíveis sobre vulnerabilidades. Mantenha os artefactos privados e reveja o destino e o conteúdo antes de publicar deteções. Escolha o exemplo correspondente ao seu fornecedor 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 Crie uma variável de CI/CD CODEX_SECURITY_API_KEY mascarada e reveja os artefactos da análise
em privado antes de partilhar as conclusões.
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, configure uma política de branch de Build validation para executar o pipeline em pull requests.
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
}
}
}
}
} Os exemplos ignoram pull requests provenientes de forks. Execute tarefas com credenciais apenas a partir de uma
definição de pipeline protegida e apenas para contribuidores nos quais confia para utilizar a credencial
da análise. Arquive codex-security-scans para manter em conjunto as descobertas estruturadas,
o manifesto, a cobertura e report.md, juntamente com quaisquer resultados solicitados em
findings/ ou hardening/. Comece com resultados de caráter consultivo e reveja
a cobertura e o tempo de execução antes de tornar a tarefa numa verificação obrigatória.
Para obter informações sobre o tratamento da API key e os controlos da sandbox, consulte o Modo não
interativo. Se a sua organização permitir a Codex
GitHub Action, esta pode instalar a CLI durante a execução, mas
ainda terá de instalar primeiro o plugin e direcionar a entrada codex-home da ação para
o mesmo CODEX_HOME.