redact-secret · Report
User auth token
sntryu_ prefixed personal auth token.
Research record
3 events in the review history: 2 observed, 1 reviewed. Latest: observed on 2026-10-03 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.
Format
What it looks like
- Descriptive pattern
^sntryu_[0-9a-f]{64}$
Parts are shown as recorded. Evidence classes belong to the facts below; no class is assigned to a part.
Format facts
Provider documented ·
mutable-property-source· current · observed 2026-09-24Documentation for the one property varied in legacy twin fixtures (sntryu_ + secrets.token_hex(32)): Un-probeable record lifted 2026-09-24 (#207): Sentry's own server code (provider code on github.com, so the tier stays T2) builds the token as the sntryu_ prefix plus 64 lowercase hex characters. Twins mutate the prefix, the _ delimiter, the length or a non-hex byte; none is a bare 64-hex value, since legacy unprefixed tokens are still valid secrets.
- getsentry/sentry @ b5116cbbd0: src/sentry/models/apitoken.pyprovider-documentation · last read 2026-09-24 · latest outcome read · supports Un-probeable record lifted 2026-09-24 (#207): Sentry's own server code (provider code on github.com, so the tier stays T2) builds the token as the sntryu_ prefix plus 64 lowercase hex characters. Twins mutate the prefix, the _ delimiter, the length or a non-hex byte; none is a bare 64-hex value, since legacy unprefixed tokens are still valid secrets. · #L106-L112
Unresolved ·
tool-corroboration· current · observed 2026-09-22Pinned scanner rules are consistent with the contract grammar (1 artifact: gitleaks 8.30.1).
- 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
Provider documented ·
field-prefix· current · observed 2026-09-22prefix: sntryu_ (siblings sntrys_, sntrya_, sntryi_ are other token kinds)
- getsentry/sentry @ f5d6d77049: src/sentry/types/token.pyprovider-sdk-source · last read 2026-09-22 · latest outcome read · supports prefix: sntryu_ (siblings sntrys_, sntrya_, sntryi_ are other token kinds)
Provider documented ·
field-body· current · observed 2026-09-22body: 64 lowercase hex characters from secrets.token_hex(32); the server cannot emit uppercase
- getsentry/sentry @ b5116cbbd0: src/sentry/models/apitoken.pyprovider-documentation · last read 2026-09-24 · latest outcome read · supports body: 64 lowercase hex characters from secrets.token_hex(32); the server cannot emit uppercase · #L106-L112
Unresolved ·
field-legacy-unprefixed-tokens· current · observed 2026-09-22legacy unprefixed tokens: pre-2024 user tokens are bare 64 hex and still valid; they are secrets, so no bare 64-hex value beside a sentry keyword is used as a control
- github.com/redact-secret/redact-secret/issues/659provider-sdk-source · last read 2026-09-22 · latest outcome read · supports legacy unprefixed tokens: pre-2024 user tokens are bare 64 hex and still valid; they are secrets, so no bare 64-hex value beside a sentry keyword is used as a control
Unresolved ·
dossier-research· current · observed 2026-09-24Legacy dossier research (verdict ready, tier T2) cited 4 sources; the dossier does not attribute sources to individual properties.
- getsentry/sentry @ f5d6d77049257892315c3823ebb504d189ddafb8: src/sentry/types/token.pyprovider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports Cited by the legacy dossier research for this family
- getsentry/sentry @ b5116cbbd0b81d62592318b0f3de660c215bcdb6: src/sentry/models/apitoken.pyprovider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports Cited by the legacy dossier research for this family
- getsentry/sentry-cli @ c880db5fc6b69378b62310b7fdbd74637bcd5fb4: src/utils/auth_token/user_auth_token.rsprovider-sdk-source · last read 2026-10-03 · latest outcome unchanged · supports Cited by the legacy dossier research for this family
- redact-secret/redact-secret @ 8b6a5fde52ecb4dfce13f09c7a947062d21483c7: docs/audits/evidence/659/README.mdproject-research-note · last read 2026-09-24 · latest outcome read · supports Final research evidence recorded by the legacy dossier
Open questions
No open question is recorded for this revision.
Benchmark dossier notes
- Shape
sntryu_then 64 lowercase hex characters (32 random bytes hex-encoded; the database column allows 71). Sentry's docs call these "Personal Tokens", and GitHub's pattern issentry_personal_token. Unprefixed user tokens created before the prefix shipped (getsentry/sentry#68148, merged 2024-04-17; bare 64 hex) remain valid and fall outside this contract.- Basis
- T2.
getsentry/sentrytypes/token.pysetsUSER = "sntryu_"andapitoken.pybuilds the token as prefix plussecrets.token_hex(nbytes=32);sentry-clirequires the body to hex-decode to exactly 32 bytes. Scanners: gitleaks, TruffleHog v2, CredSweeper, betterleaks. One placeholdersntryu_...onskills.sentry.dev(Sentry's agent-skill library) is the only provider-domain appearance and labels the token an org token, so it is contested as a T1 source. - Issuance
- not attempted; 0 maintainer observations.
- Contract in core
- detector-families.md; evidence #659 record.
In this benchmark
- Fixtures
- 40
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
40 fixtures: 18 expect a redaction, 22 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 23 | 0 | 0 | 0 |
| T2Tool-corroborated | 8 | 0 | 0 | 0 |
| T3Project policy | 9 | 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 | 40 | 17 | 1 | 1 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rules1 rule targets it | 40 | 0 | 0 | 1 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 40 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled1 rule targets it | 40 | 0 | 0 | 1 |
Benchmark dossier questions
- Open caveat
- No Sentry web domain states the format (skills.sentry.dev shows a sntryu_ placeholder labelled org token); prefix, 64 lowercase hex and legacy unprefixed tokens rest on Sentry server and CLI code.
Looks like it, but isn't
- Collisions
sntrys_,sntrya_andsntryi_are sibling token types.
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| gitleaks · rules 8.30.1 | sentry-user-token | sntryu_ + 64 hex |
| trufflehog · rules 3.97.4 | sentrytoken/v2 | sntryu_ + 64 hex |
No rule maps to this family in flare-redact, openredaction.
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
sentry-user-auth-token-actions-envsentry · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
sentry-user-auth-token-api-curlsentry · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
sentry-user-auth-token-bomsentry · multibyte-text-offsets | Must redactT2 · Tool-corroborated | Redacted |
sentry-user-auth-token-compose-envsentry · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
sentry-user-auth-token-dash-delimiter-twinsentry · boundary-violation | Must not flagT1 · Provider-documented · twin | Quiet |
sentry-user-auth-token-dsn-public-idsentry · public-identifier | Must not flagT1 · Provider-documented | Quiet |
sentry-user-auth-token-envsentry · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
sentry-user-auth-token-jsonsentry · structured-text-value | Must redactT2 · Tool-corroborated | Redacted |
sentry-user-auth-token-markdownsentry · markdown-and-comment-value | Must redactT2 · Tool-corroborated | Redacted |
sentry-user-auth-token-no-final-newlinesentry · value-at-input-edges | Must redactT2 · Tool-corroborated | Redacted |
sentry-user-auth-token-prefix-twinsentry · prefix-near-miss | Must not flagT1 · Provider-documented · twin | Quiet |
sentry-user-auth-token-pythonsentry · source-code-string-literal | Must redactT2 · Tool-corroborated | Redacted |
sentry-user-auth-token-script-constantsentry · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
sentry-user-auth-token-sentry-clisentry · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
sentry-user-auth-token-sentryclircsentry · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
sentry-user-auth-token-shape-1-baresentry · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
sentry-user-auth-token-shape-1-quotedsentry · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
sentry-user-auth-token-shape-1-unicode-crlfsentry · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
sentry-user-auth-token-single-quotessentry · quoted-value-extent | Must redactT2 · Tool-corroborated | Redacted |
sentry-user-auth-token-tomlsentry · structured-text-value | Must redactT2 · Tool-corroborated | Redacted |
sentry-user-auth-token-yamlsentry · structured-text-value | Must redactT2 · Tool-corroborated | Redacted |
sentry-user-auth-token-actions-secret-referencesentry · templated-reference | Must not flagT3 · Project policy | Quiet |
sentry-user-auth-token-docs-ellipsis-placeholdersentry · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
sentry-user-auth-token-half-body-in-prose-near-misssentry · format-near-miss | Must not flagT1 · Provider-documented | Quiet |
sentry-user-auth-token-label-prosesentry · benign-lookalike | Must not flagT3 · Project policy | Quiet |
sentry-user-auth-token-last-four-placeholdersentry · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
sentry-user-auth-token-masksentry · benign-lookalike | Must not flagT3 · Project policy | Quiet |
sentry-user-auth-token-missing-delimiter-twinsentry · boundary-violation | Must not flagT1 · Provider-documented · twin | Quiet |
sentry-user-auth-token-naming-note-prosesentry · prose-mention | Must not flagT3 · Project policy | Quiet |
sentry-user-auth-token-non-hex-cli-twinsentry · wrong-alphabet | Must not flagT1 · Provider-documented · twin | Quiet |
sentry-user-auth-token-non-hex-twinsentry · wrong-alphabet | Must not flagT1 · Provider-documented · twin | Quiet |
sentry-user-auth-token-org-prefix-hex-in-log-near-misssentry · format-near-miss | Must not flagT1 · Provider-documented | Quiet |
sentry-user-auth-token-org-slug-public-idsentry · public-identifier | Must not flagT3 · Project policy | Quiet |
sentry-user-auth-token-prefix-compose-twinsentry · prefix-near-miss | Must not flagT1 · Provider-documented · twin | Quiet |
sentry-user-auth-token-prefix-onlysentry · benign-lookalike | Must not flagT1 · Provider-documented | Quiet |
sentry-user-auth-token-referencesentry · benign-lookalike | Must not flagT3 · Project policy | Quiet |
sentry-user-auth-token-short-bodysentry · benign-lookalike | Must not flagT1 · Provider-documented | Quiet |
sentry-user-auth-token-short-ci-twinsentry · wrong-length | Must not flagT1 · Provider-documented · twin | Quiet |
sentry-user-auth-token-short-twinsentry · wrong-length | Must not flagT1 · Provider-documented · twin | Quiet |
sentry-user-auth-token-tarball-digest-encoded-valuesentry · benign-encoded-value | Must not flagT3 · Project policy | Quiet |
Sources
Documentation and code
- github.com/getsentry/sentry/blob/b5116cbbd0b81d62592318b0f3de660c215bcdb6/src/sentry/models/apitoken.py
- github.com/getsentry/sentry/blob/f5d6d77049257892315c3823ebb504d189ddafb8/src/sentry/types/token.py
- github.com/getsentry/sentry-cli/blob/c880db5fc6b69378b62310b7fdbd74637bcd5fb4/src/utils/auth_token/user_auth_token.rs
Research log
- redact-secret/redact-secret#659Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/659/README.md