redact-secret · Report · Detector
RubyGems API keys
Format evidence
- Provider documentation rubygems/rubygems.org app/controllers/concerns/api_keyable.rb (d4cfcc9, last changed 2026-03-03): generate_rubygems_key returns "rubygems_#{SecureRandom.hex(24)}"; re-checked 2026-09-29 · observed 2026-09-29 · rubygems_ + exactly 48 lowercase hex (24 random bytes), 57 in all; no checksum
- gitleaks 8.30.1
- trufflehog 3.97.4
- Reference 1
- Reference 2
- Reference 3
- Reference 4
- Reference 5
- Reference 6
- Reference 7
- Reference 8
Arrival evidence (#528, product redact-secret#1023; #1014 handoff rubygems.md, READY). A key can push and yank gems and manage owners within its scopes, so a leak is a supply-chain risk for every gem the account owns. T1 for the prefix, the 48-byte length and the lowercase-hex alphabet under R1, from the provider's own generator; OIDC-exchanged keys share it. RubyGems sends the key in Authorization without a scheme. Excluded: legacy unprefixed keys (no shape; generic context covers GEM_HOST_API_KEY= and :rubygems_api_key:), rubygems_version and rubygems_mfa_required metadata keys (they fail the body) and uppercased copies. gitleaks 8.30.1 agrees with the grammar but also requires a trailing delimiter; trufflehog 3.97.4 reads a wider class (any lowercase letter and A), so it overreaches on a non-hex letter twin. Graduated to a registry detector at the 4fb7882 re-pin (redact-secret PR #1039).
What the run recorded, by group
| Group | Fixtures | Leaked or false alarms | Near-twins | Outcomes | Other scanners, same cell |
|---|---|---|---|---|---|
| Must not flag · Tool-corroborated | 15 | False alarmsat most 20.4%0 of 15 controls flagged | 15 quiet · 0 flagged |
| |
| Must not flag · Project policy | 8 | False alarmsat most 32.4%0 of 8 controls flagged | 8 quiet · 0 flagged |
| |
| Must redact · Provider-documented | 16 | Secret spans left readableat most 19.4%0 of 16 spans | Near-twins told apartat least 70.1%9 of 9 pairs | 16 redacted · 0 too much · 0 partly exposed · 0 missed |
|
- Fixtures
- 39
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
Fixtures for this detector
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
rubygems-api-key-actions-envrubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-authorization-no-schemerubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-bare-proserubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-bearer-headerrubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-chat-pasterubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-dotenvrubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-exportrubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-gem-credentials-yamlrubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-gem-push-envrubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-json-api-keyrubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-json-tokenrubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-key-shape-barerubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-key-shape-quotedrubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-key-shape-unicode-crlfrubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-non-hex-letter-twinrubygems · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
rubygems-api-key-sdk-kwargrubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-x-api-key-headerrubygems · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
rubygems-api-key-actions-secret-referencerubygems · templated-reference | Must not flagT3 · Project policy | Quiet |
rubygems-api-key-bare-48-hex-encoded-valuerubygems · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
rubygems-api-key-body-47-twinrubygems · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
rubygems-api-key-body-49-twinrubygems · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
rubygems-api-key-credentials-placeholder-placeholderrubygems · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
rubygems-api-key-ellipsis-placeholderrubygems · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
rubygems-api-key-env-reference-referencerubygems · templated-reference | Must not flagT3 · Project policy | Quiet |
rubygems-api-key-gemspec-metadata-public-idrubygems · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
rubygems-api-key-hyphen-separator-twinrubygems · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
rubygems-api-key-key-guidance-proserubygems · prose-mention | Must not flagT3 · Project policy | Quiet |
rubygems-api-key-label-proserubygems · benign-lookalike | Must not flagT3 · Project policy | Quiet |
rubygems-api-key-leading-glue-twinrubygems · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
rubygems-api-key-lockfile-version-public-idrubygems · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
rubygems-api-key-maskrubygems · benign-lookalike | Must not flagT3 · Project policy | Quiet |
rubygems-api-key-prefix-onlyrubygems · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
rubygems-api-key-referencerubygems · benign-lookalike | Must not flagT3 · Project policy | Quiet |
rubygems-api-key-short-bodyrubygems · benign-lookalike | Must not flagT2 · Tool-corroborated | Quiet |
rubygems-api-key-trailing-letter-twinrubygems · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
rubygems-api-key-trailing-underscore-twinrubygems · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
rubygems-api-key-truncated-near-missrubygems · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
rubygems-api-key-uppercase-hex-byte-twinrubygems · wrong-alphabet | Must not flagT2 · Tool-corroborated · twin | Quiet |
rubygems-api-key-uppercase-prefix-twinrubygems · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |