redact-secret · Report
Admin API key (sk-admin-)
sk-admin- prefixed organization admin key with the T3BlbkFJ marker between two 58- or 74-byte segments; a marker-less body is out of contract.
Research record
3 events in the review history: 2 observed, 1 reviewed. Latest: observed on 2026-09-29 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.
Format
What it looks like
- Descriptive pattern
^sk-admin-[A-Za-z0-9_-]{58}T3BlbkFJ[A-Za-z0-9_-]{58}$
Parts are shown as recorded. Evidence classes belong to the facts below; no class is assigned to a part.
Format facts
Tool corroborated ·
tool-corroboration· current · observed 2026-09-26Pinned scanner rules are consistent with the contract grammar (3 artifacts: gitleaks 8.30.1; trufflehog 3.97.4; trufflehog issue 4698 (admin-key request)).
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports gitleaks 8.30.1: gitleaks.toml
- github.com/trufflesecurity/trufflehog/issues/4698scanner-rule-source · last read 2026-09-26 · latest outcome read · supports trufflehog issue 4698 (admin-key request): marker-less 124-character body
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/openaiadmin/openaiadmin.goscanner-rule-source · last read 2026-09-26 · latest outcome read · supports trufflehog 3.97.4: openaiadmin (PR #4689): sk-admin- + 58 + T3BlbkFJ + 58
Provider documented ·
field-prefix· current · observed 2026-09-26prefix: sk-admin- (Provider code, not a provider documentation page; the reference example in the API reference is illustrative only.)
- openai/codex @ 418199f6ade4f9018b1f0b455a685387a811ad2e: codex-rs/network-proxy/src/credential_broker/providers/openai.rsprovider-sdk-source · last read 2026-09-29 · latest outcome read · supports the OpenAI credential broker names the prefix set and the T3BlbkFJ watermark · #L13-L23
- github.com/redact-secret/redact-secret/issues/777provider-documentation · last read 2026-09-26 · latest outcome read · supports prefix: sk-admin-
Tool corroborated ·
field-marker· current · observed 2026-09-26marker: T3BlbkFJ between two body segments
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports three admin test vectors
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/openaiadmin/openaiadmin.goscanner-rule-source · last read 2026-09-26 · latest outcome read · supports dedicated admin detector (PR #4689): marker + 58/58
Tool corroborated ·
field-segment-widths· current · observed 2026-09-26segment-widths: 58/58 (133 characters in all) (One byte short on either side reads as a non-key.)
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports 58 + marker + 58; its three admin vectors are 58/58
- redact-secret/redact-secret @ add1188fed9993723c59fbce8c867086b9d2049a: docs/audits/evidence/1013/openai-admin-api-key.mdscanner-rule-source · last read 2026-09-29 · latest outcome read · supports five references from five owners
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/openaiadmin/openaiadmin.goscanner-rule-source · last read 2026-09-26 · latest outcome read · supports exactly 58 + marker + 58
Unresolved ·
field-width-74· current · observed 2026-09-26width-74: a 74 + T3BlbkFJ + 74 admin body, the width the product shares with sk-proj- and sk-svcacct- (Outside the claim: no positive, twin or control is 74/74, and a mixed 58/74 width is not authored either way. The shipped detector accepts 74/74; that over-redaction is not measured.)
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports admits 74 only through the width union shared with sk-proj-/sk-svcacct-
- redact-secret/redact-secret @ add1188fed9993723c59fbce8c867086b9d2049a: docs/audits/evidence/1013/openai-admin-api-key.mdscanner-rule-source · last read 2026-09-29 · latest outcome read · supports no source shows a 74/74 admin value; trufflehog openaiadmin, nuclei-templates and poltergeist admit 58/58 only
Unresolved ·
field-body-alphabet· current · observed 2026-09-26body-alphabet: [A-Za-z0-9_-]
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports body-alphabet: [A-Za-z0-9_-]
- github.com/redact-secret/redact-secret/issues/777provider-documentation · last read 2026-09-26 · latest outcome read · supports body-alphabet: [A-Za-z0-9_-]
Unresolved ·
field-marker-less-body· current · observed 2026-09-26marker-less-body: a 124-character [A-Za-z0-9_-] body without the marker (Out of contract by the product decision in #863. It is a negative twin, never a positive; Bearer and quoted-assignment contexts still redact it through the generic layers, which co-detection records.)
- github.com/trufflesecurity/trufflehog/issues/4698scanner-rule-source · last read 2026-09-26 · latest outcome read · supports request text; numerically equal to 58 + 8 + 58
Unresolved ·
field-blog-widths· current · observed 2026-09-26blog-widths: a {40,} floor and 164-character totals from two blog pages (Not used.)
- github.com/redact-secret/redact-secret/issues/777provider-documentation · last read 2026-09-26 · latest outcome read · supports rows 10-11, contradicted by the gitleaks vectors
Provider documented ·
field-public-key-id· current · observed 2026-09-26public-key-id: the admin key resource id (key_...) and the redacted_value display are public identifiers (Backs the public-id controls; no shape is claimed beyond the prefix key_.)
- github.com/redact-secret/redact-secret/issues/777provider-documentation · last read 2026-09-26 · latest outcome read · supports hands-on checklist item; shape recorded, not observed
Unresolved ·
listed-references· current · observed 2026-09-26The legacy contract lists 4 references without stating which property each supports.
- github.com/redact-secret/redact-secret/issues/863issue-or-discussion · last read 2026-09-26 · latest outcome read · supports Listed as a reference by the legacy contract
- github.com/redact-secret/redact-secret/issues/777provider-documentation · last read 2026-09-26 · latest outcome read · supports Listed as a reference by the legacy contract
- redact-secret/redact-secret @ add1188fed9993723c59fbce8c867086b9d2049a: docs/audits/evidence/1013/openai-admin-api-key.mdscanner-rule-source · last read 2026-09-29 · latest outcome read · supports Listed as a reference by the legacy contract
- platform.openai.com/docs/api-reference/admin-api-keysother · last read 2026-09-26 · latest outcome read · supports Listed as a reference by the legacy contract
Tool corroborated ·
dossier-research· current · observed 2026-09-29Legacy dossier research (verdict ready, tier T2) cited 7 sources; the dossier does not attribute sources to individual properties.
- developers.openai.com/api/docs/guides/admin-apisprovider-documentation · last read 2026-09-29 · latest outcome read · supports Cited by the legacy dossier research for this family
- ghostsecurity/poltergeist @ e071ca2d15f652c6e87e63a64716144a9383c3b2: pkg/rules/openai.yamlother · last read 2026-09-29 · latest outcome read · supports Cited by the legacy dossier research for this family · #L36
- gitleaks/gitleaks @ 83d9cd684c87d95d656c1458ef04895a7f1cbd8e: cmd/generate/config/rules/openai.goother · last read 2026-09-29 · latest outcome read · supports Cited by the legacy dossier research for this family · #L14
- openai/codex @ 418199f6ade4f9018b1f0b455a685387a811ad2e: codex-rs/network-proxy/src/credential_broker/providers/openai.rsprovider-sdk-source · last read 2026-09-29 · latest outcome read · supports Cited by the legacy dossier research for this family · #L13-L23
- projectdiscovery/nuclei-templates @ 02b06eb813310376e9a29543fd63a53f0dd3d4b3: http/exposures/tokens/openai/openai-admin-api-key.yamlother · last read 2026-09-29 · latest outcome read · supports Cited by the legacy dossier research for this family · #L23
- redact-secret/redact-secret @ add1188fed9993723c59fbce8c867086b9d2049a: docs/audits/evidence/1013/openai-admin-api-key.mdscanner-rule-source · last read 2026-09-29 · latest outcome read · supports Final research evidence recorded by the legacy dossier
- trufflesecurity/trufflehog @ 363923b901c911a9164f50b6c423f47c15372b1c: pkg/detectors/openaiadmin/openaiadmin.goother · last read 2026-09-29 · latest outcome read · supports Cited by the legacy dossier research for this family · #L26-L29
Tool corroborated ·
taxonomy-sources· current · observed 2026-09-29The legacy taxonomy lists 2 sources for this family. The taxonomy records no date; the dossier researchedAt is used as the observed-at date.
- gitleaks/gitleaks @ v8.30.1: config/gitleaks.tomlscanner-rule-source · last read 2026-10-04 · latest outcome read · supports Listed as a source for this family in the legacy taxonomy
- openai/codex @ 418199f6ade4f9018b1f0b455a685387a811ad2e: codex-rs/network-proxy/src/credential_broker/providers/openai.rsprovider-sdk-source · last read 2026-09-29 · latest outcome read · supports Listed as a source for this family in the legacy taxonomy · #L13-L23
Open questions
No open question is recorded for this revision.
Benchmark dossier notes
- Shape
- prefix
sk-admin-, then 58 or 74 characters of[A-Za-z0-9_-], the markerT3BlbkFJ, then 58 or 74 more. The three gitleaks admin vectors are all 58/58 (133 characters). A marker-less body of any length is unevidenced and out of contract, including the 124-character body in a trufflehog feature request, which equals 58 + 8 + 58. - Basis
- T2. Provider evidence is family-level only: the Admin API guide states scope (admin keys cannot call non-administration endpoints, env var
OPENAI_ADMIN_KEY), andopenai/codexnamessk-admin-and the watermark. gitleaks 8.30.1 requires the marker on admin keys. trufflehog 3.97.4 does not exclude admin keys: PR #4689 (2026-02-11) moved them out of the genericopenaidetector into a dedicatedopenaiadmindetector that requires the marker and exactly 58/58 (an earlier reading of this dossier called it an exclusion; corrected by redact-secret#1013). nuclei-templates and poltergeist also match 58 + marker + 58. Withopenai/codexthat is 5 references, 5 owners and 2 non-summary classes for the 58/58 shape, recorded inempirical-observations.json. GitGuardian has a dedicated detector with no length stated. - Issuance
- not attempted. Organization owners create admin keys under organization settings; the checklist (prefix, two segment widths, marker offset, alphabet, shown once) is in the #777 research comment.
- Contract in core
- detector-families.md. #863 reconciled the precision contract (previously
pending, T0) with the detector. Product PR #882 gave admin keys their own finding type.
In this benchmark
- Fixtures
- 43
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
43 fixtures: 19 expect a redaction, 24 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T2Tool-corroborated | 35 | 0 | 0 | 0 |
| T3Project policy | 8 | 0 | 0 | 0 |
Every scanner on the same fixtures
In run order. Counts are what each scanner recorded on this family's fixtures, whichever rules it has; a scanner with no rule for the family has nothing to report on it.
| Scanner | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| flare-redactRuntime library · 1.6.1 · Published npm package · secrets-only (pii, generic_assignment disabled) · JavaScript engineNo rule maps to it | 43 | 16 | 3 | 5 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rules1 rule targets it | 43 | 1 | 0 | 3 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 43 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled1 rule targets it | 43 | 1 | 0 | 0 |
Benchmark dossier questions
- Open caveat
- No provider page states an admin-key length or alphabet, so T1 is unreachable. 58/58 rests on four peer owners; no source anywhere shows a 74/74 admin value, which gitleaks admits only through the width union it shares with
sk-proj-/sk-svcacct-. As #1013 recommends, the benchmark claim is 58/58 only and no fixture asserts 74/74 either way (bounded in the ledger); the product keeps accepting 74/74.
Looks like it, but isn't
- Collisions
- shares the
sk-namespace and marker grammar withsk-proj-andsk-svcacct-. The admin key resourceidis not the secret. Blogs conflate 164-character project widths and{40,}bounds with admin.
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| gitleaks · rules 8.30.1 | openai-api-key | sk-proj-, sk-svcacct- or sk-admin- with the T3BlbkFJ marker |
| trufflehog · rules 3.97.4 | openaiadmin | sk-admin- + 58 + T3BlbkFJ + 58 |
No rule maps to this family in flare-redact, openredaction.
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
openai-admin-api-key-actions-usage-exportopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-admn-prefix-twinopenai · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
openai-admin-api-key-compose-envopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-config-tomlopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-curl-beareropenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-dotenvopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-exportopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-first-segment-57-twinopenai · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
openai-admin-api-key-gitlab-ci-variablesopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-go-constopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-json-configopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-key-digest-encoded-valueopenai · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
openai-admin-api-key-lowercase-marker-twinopenai · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
openai-admin-api-key-markerless-test-name-near-missopenai · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
openai-admin-api-key-oncall-handoffopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-powershell-envopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-prefix-only-near-missopenai · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
openai-admin-api-key-python-requests-headersopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-python-sdkopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-requests-debugopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-short-second-segment-twinopenai · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
openai-admin-api-key-tfvars-admin-keyopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-tool-callopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-ts-clientopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-usage-cli-flagopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-usage-logopenai · documented-format-literal | Must redactT2 · Tool-corroborated | Redacted |
openai-admin-api-key-actions-secret-referenceopenai · templated-reference | Must not flagT3 · Project policy | Quiet |
openai-admin-api-key-admin-keys-listing-public-idopenai · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
openai-admin-api-key-console-mask-placeholderopenai · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
openai-admin-api-key-docs-ellipsis-placeholderopenai · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
openai-admin-api-key-embedded-leading-twinopenai · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
openai-admin-api-key-env-reference-referenceopenai · templated-reference | Must not flagT3 · Project policy | Quiet |
openai-admin-api-key-inside-identifier-near-missopenai · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
openai-admin-api-key-key-resource-public-idopenai · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
openai-admin-api-key-marker-fk-twinopenai · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
openai-admin-api-key-marker-less-body-twinopenai · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
openai-admin-api-key-org-and-project-public-idopenai · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
openai-admin-api-key-permissions-paragraph-proseopenai · prose-mention | Must not flagT3 · Project policy | Quiet |
openai-admin-api-key-prefix-guidance-proseopenai · prose-mention | Must not flagT3 · Project policy | Quiet |
openai-admin-api-key-secrets-manager-arn-referenceopenai · templated-reference | Must not flagT3 · Project policy | Quiet |
openai-admin-api-key-short-first-segment-twinopenai · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
openai-admin-api-key-underscore-delimiter-twinopenai · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
openai-admin-api-key-your-key-here-placeholderopenai · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
Sources
Documentation and code
- github.com/openai/codex/blob/418199f6ade4f9018b1f0b455a685387a811ad2e/codex-rs/network-proxy/src/credential_broker/providers/openai.rs#L13-L23
- github.com/gitleaks/gitleaks/blob/v8.30.1/config/gitleaks.toml
- developers.openai.com/api/docs/guides/admin-apis
- github.com/trufflesecurity/trufflehog/blob/363923b901c911a9164f50b6c423f47c15372b1c/pkg/detectors/openaiadmin/openaiadmin.go#L26-L29
- github.com/gitleaks/gitleaks/blob/83d9cd684c87d95d656c1458ef04895a7f1cbd8e/cmd/generate/config/rules/openai.go#L14
- github.com/projectdiscovery/nuclei-templates/blob/02b06eb813310376e9a29543fd63a53f0dd3d4b3/http/exposures/tokens/openai/openai-admin-api-key.yaml#L23
- github.com/ghostsecurity/poltergeist/blob/e071ca2d15f652c6e87e63a64716144a9383c3b2/pkg/rules/openai.yaml#L36
Research log
- redact-secret/redact-secret#777Research issue
- redact-secret/redact-secret#774Research issue
- redact-secret/redact-secret#863Research issue
- redact-secret/redact-secret#882Research issue
- redact-secret/redact-secret#1013Research issue
- redact-secret/redact-secret-benchmarks#384Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/add1188fed9993723c59fbce8c867086b9d2049a/docs/audits/evidence/1013/openai-admin-api-key.md