redact-secret · Report
User token
User OAuth token, prefixed xoxp-.
Research record
3 events in the review history: 2 observed, 1 reviewed. Latest: observed on 2026-09-27 by automation, project maintainer. Project-maintained review is not independent validation. The family record at this release.
Format
What it looks like
- Descriptive pattern
^xoxp-[0-9]+-[0-9]+-[0-9]+-[A-Za-z0-9]+$
Parts are shown as recorded. Evidence classes belong to the facts below; no class is assigned to a part.
Format facts
Provider documented ·
provider-source· current · observed 2026-09-24xoxp- user token, dash-separated sections, secret last: the provider states user tokens begin with xoxp-, that tokens are dash-separated sections with the secret last, and shows a three-numeric-section example; it states no section widths or secret alphabet, says pre-August-2016 user tokens may carry 6- or 10-character secrets, and the 2016 token-lengthening changelog warns against relying on perceived token semantics
- docs.slack.dev/authentication/tokensprovider-documentation · last read 2026-10-04 · latest outcome read · supports the provider states user tokens begin with xoxp-, that tokens are dash-separated sections with the secret last, and shows a three-numeric-section example; it states no section widths or secret alphabet, says pre-August-2016 user tokens may carry 6- or 10-character secrets, and the 2016 token-lengthening changelog warns against relying on perceived token semantics
Tool corroborated ·
tool-corroboration· current · observed 2026-09-24Pinned scanner rules are consistent with the contract grammar (2 artifacts: gitleaks 8.30.1; trufflehog 3.97.4).
- 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
- trufflesecurity/trufflehog @ v3.97.4: pkg/detectors/slack/slack.goscanner-rule-source · last read 2026-09-24 · latest outcome read · supports trufflehog 3.97.4: slack/slack
Provider documented ·
field-prefix· current · observed 2026-09-24prefix: xoxp-
- docs.slack.dev/authentication/tokensprovider-documentation · last read 2026-10-04 · latest outcome read · supports prefix: xoxp-
Provider documented ·
field-section-structure· current · observed 2026-09-24section structure: dash-separated sections, secret last
- docs.slack.dev/authentication/tokensprovider-documentation · last read 2026-10-04 · latest outcome read · supports section structure: dash-separated sections, secret last
Provider documented ·
field-numeric-section-count· current · observed 2026-09-24numeric section count: three numeric sections before the secret
- docs.slack.dev/authentication/tokensprovider-documentation · last read 2026-10-04 · latest outcome read · supports example with 3-digit placeholder sections; not copied into any fixture
Unresolved ·
field-numeric-section-widths· current · observed 2026-09-24numeric section widths: 10-13 digits observed by tools (11/10/11, 12/12/12, 13/13/13) (Not in the pattern; no fixture asserts silence on a width.)
- gitleaks/gitleaks @ master: cmd/generate/config/rules/slack.goprovider-sdk-source · last read 2026-09-24 · latest outcome read · supports numeric section widths: 10-13 digits observed by tools (11/10/11, 12/12/12, 13/13/13)
Provider documented ·
field-secret-width-and-alphabet· current · observed 2026-09-24secret width and alphabet: 32 lowercase hex observed; pre-2016 6 or 10 characters documented (Tools disagree (hex vs [A-Za-z0-9] vs [A-Za-z0-9-]); not frozen.)
- docs.slack.dev/authentication/tokensprovider-documentation · last read 2026-10-04 · latest outcome read · supports secret width and alphabet: 32 lowercase hex observed; pre-2016 6 or 10 characters documented
- praetorian-inc/noseyparker @ main: crates/noseyparker/data/default/builtin/rules/slack.ymlprovider-documentation · last read 2026-09-24 · latest outcome read · supports secret width and alphabet: 32 lowercase hex observed; pre-2016 6 or 10 characters documented
Unresolved ·
field-rotating-xoxe-xoxp-tokens· current · observed 2026-09-24rotating xoxe.xoxp- tokens: rotating user tokens and app-config tokens share xoxe.xoxp- (Outside this contract until scope is decided; never a benign control.)
- docs.slack.dev/authentication/using-token-rotation/provider-documentation · last read 2026-10-04 · latest outcome read · supports rotating xoxe.xoxp- tokens: rotating user tokens and app-config tokens share xoxe.xoxp-
Unresolved ·
field-service-token· current · observed 2026-09-24service token: truncated xoxp-1-<digits>... example
- slackapi/slack-cli @ main: docs/reference/commands/slack_auth_revoke.mdprovider-sdk-source · last read 2026-09-24 · latest outcome read · supports service token: truncated xoxp-1-<digits>... example
Unresolved ·
listed-references· current · observed 2026-09-24The legacy contract lists 2 references without stating which property each supports.
- docs.slack.dev/authentication/using-token-rotation/provider-documentation · last read 2026-10-04 · latest outcome read · supports Listed as a reference by the legacy contract
- docs.slack.dev/changelog/2016/08/23/token-lengtheningprovider-documentation · last read 2026-09-27 · latest outcome read · supports Listed as a reference by the legacy contract
Provider documented ·
dossier-research· current · observed 2026-09-27Legacy dossier research (verdict ready, tier T1) cited 4 sources; the dossier does not attribute sources to individual properties.
- docs.slack.dev/authentication/using-token-rotation/provider-documentation · last read 2026-10-04 · latest outcome read · supports Cited by the legacy dossier research for this family
- docs.slack.dev/authentication/tokensprovider-documentation · last read 2026-10-04 · latest outcome read · supports Cited by the legacy dossier research for this family
- docs.slack.dev/changelog/2016/08/23/token-lengtheningprovider-documentation · last read 2026-09-27 · latest outcome read · supports Cited by the legacy dossier research for this family
- redact-secret/redact-secret @ 8b6a5fde52ecb4dfce13f09c7a947062d21483c7: docs/audits/evidence/726/README.mdproject-research-note · last read 2026-09-27 · latest outcome read · supports Final research evidence recorded by the legacy dossier
Provider documented ·
taxonomy-sources· current · observed 2026-09-27The legacy taxonomy lists 1 source for this family. The taxonomy records no date; the dossier researchedAt is used as the observed-at date.
- docs.slack.dev/authentication/tokensprovider-documentation · last read 2026-10-04 · latest outcome read · supports Listed as a source for this family in the legacy taxonomy
Open questions
No open question is recorded for this revision.
Benchmark dossier notes
- Shape
- prefix
xoxp-, three numeric sections, then the secret section, dash-separated. Slack's example shows three-digit placeholder sections, so widths are not stated. Slack documents that secrets issued before August 2016 can be 6 or 10 characters instead of 32. - Basis
- T1 for prefix, section semantics and the short legacy secrets (the two provider pages above). Widths are tool-only and differ: gitleaks 10 to 13 digits per section and a 28 to 34 character secret, Nosey Parker 12 digits and lowercase hex, trufflehog two numeric sections and an open tail. Slack's own CLI redacts
xoxp-on prefix alone. - Issuance
- OAuth v2 user token, legacy tester token (no longer issued), and possibly the service token. Not attempted. Revocable with
auth.revoke. - Contract in core
- detector-families.md (Beta.8 wave 2;
xoxp-plus three numeric sections plus a final section, no width rule).
In this benchmark
- Fixtures
- 27
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
27 fixtures: 11 expect a redaction, 16 must stay quiet. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 11 | 0 | 0 | 0 |
| T2Tool-corroborated | 10 | 0 | 0 | 0 |
| T3Project policy | 6 | 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 engine1 rule targets it | 27 | 9 | 1 | 4 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rules1 rule targets it | 27 | 0 | 0 | 1 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 27 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled1 rule targets it | 27 | 0 | 0 | 1 |
Benchmark dossier questions
- Open caveat
- Prefix and section anatomy are provider-stated; numeric-section widths and the secret's alphabet are tool-only and disagree. Needs one issued xoxp token (checklist in #229).
Looks like it, but isn't
- Collisions
xoxe.xoxp-(rotating user or app-configuration token),xoxc-(browser session token, same skeleton, 64 hex secret per one scanner rule),xoxb-,xoxe-and the CLI'sxoxp-1-...service-token example are distinct credentials. Team, user and enterprise ids are public.
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| flare-redact · rules 1.6.1 | slack_token | xoxb- or xoxp- + 10-64 characters |
| gitleaks · rules 8.30.1 | slack-user-token | xoxp- or xoxe- + three digit groups + 28-34 characters |
| openredaction · rules 1.1.5 | SLACK_TOKEN | xoxb- or xoxp- + 10 or more characters |
| trufflehog · rules 3.97.4 | slack | xoxb- or xoxp- + 10-13 digits + 10-13 digits |
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
slack-user-token-audit-envslack · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
slack-user-token-bearer-curlslack · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
slack-user-token-bolt-installation-storeslack · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
slack-user-token-curl-form-tokenslack · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
slack-user-token-docs-placeholder-placeholderslack · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
slack-user-token-dotenvslack · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
slack-user-token-dotted-sections-twinslack · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
slack-user-token-legacy-query-tokenslack · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
slack-user-token-masked-sections-placeholderslack · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
slack-user-token-missing-secret-twinslack · wrong-length | Must not flagT2 · Tool-corroborated · twin | Quiet |
slack-user-token-oauth-v2-accessslack · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
slack-user-token-python-scim-clientslack · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
slack-user-token-python-webclientslack · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
slack-user-token-slack-loginslack · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
slack-user-token-underscore-delimiter-twinslack · boundary-violation | Must not flagT2 · Tool-corroborated · twin | Quiet |
slack-user-token-auth-test-public-idslack · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
slack-user-token-base64-workspace-encoded-valueslack · benign-encoded-value | Must not flagT2 · Tool-corroborated | Quiet |
slack-user-token-channel-ids-public-idslack · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
slack-user-token-env-reference-referenceslack · templated-reference | Must not flagT3 · Project policy | Quiet |
slack-user-token-legacy-short-secretslack · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
slack-user-token-masked-log-placeholderslack · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
slack-user-token-prefix-only-near-missslack · format-near-miss | Must not flagT2 · Tool-corroborated | Quiet |
slack-user-token-sdk-environ-referenceslack · templated-reference | Must not flagT3 · Project policy | Quiet |
slack-user-token-stem-prefix-twinslack · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
slack-user-token-token-guidance-proseslack · prose-mention | Must not flagT3 · Project policy | Quiet |
slack-user-token-uppercase-prefix-twinslack · prefix-near-miss | Must not flagT2 · Tool-corroborated · twin | Quiet |
slack-user-token-webhook-host-only-public-idslack · public-identifier | Must not flagT2 · Tool-corroborated | Quiet |
Sources
Documentation and code
- docs.slack.dev/authentication/tokens
- docs.slack.dev/changelog/2016/08/23/token-lengthening
- docs.slack.dev/authentication/using-token-rotation/
Research log
- redact-secret/redact-secret-benchmarks#229Research issue
- redact-secret/redact-secret-benchmarks#367Research issue
- redact-secret/redact-secret#726Research issue
- redact-secret/redact-secret#730Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/726/README.md