redact-secret · Report
Personal access token
84-character PAT with a fixed AZDO signature at positions 76-80.
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
^[A-Za-z0-9]{76}AZDO[A-Za-z0-9]{4}$
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-2384-character PAT with AZDO signature: tokens are 84 characters long with a fixed AZDO signature at positions 76-80; Microsoft Purview separately supplies the alphanumeric detail used by the pattern
- learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticateprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports tokens are 84 characters long with a fixed AZDO signature at positions 76-80; Microsoft Purview separately supplies the alphanumeric detail used by the pattern · #pat-format
Provider documented ·
field-total-length· current · observed 2026-09-23total-length: 84 characters
- learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticateprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports "PATs are 84 characters long" · #pat-format
Provider documented ·
field-signature· current · observed 2026-09-23signature: literal AZDO at 0-based offsets 76-79 (the page's "positions 76 through 80")
- learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticateprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports signature: literal AZDO at 0-based offsets 76-79 (the page's "positions 76 through 80") · #pat-format
Provider documented ·
field-alphabet· current · observed 2026-09-23alphabet: [A-Za-z0-9] in every non-signature position (The same Purview page's Format summary says "letters, digits, and special characters". The detailed pattern and the credential example agree with this contract; the contradiction is kept on record (redact-secret#642) and no alphabet twin is authored on it.)
- learn.microsoft.com/en-us/purview/sit-defn-azure-devops-personal-access-tokenprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports detailed pattern: a-z, A-Z or 0-9
Unresolved ·
field-legacy-52-character-generation· current · observed 2026-09-22legacy-52-character-generation: the pre-2024 52-character lowercase-base32 PAT that trufflehog 3.97.4 still targets (Outside this contract; no fixture relies on it.)
- github.com/redact-secret/redact-secret/issues/642scanner-rule-source · last read 2026-09-22 · latest outcome read · supports legacy-52-character-generation: the pre-2024 52-character lowercase-base32 PAT that trufflehog 3.97.4 still targets
Unresolved ·
listed-references· current · observed 2026-09-22The legacy contract lists 1 reference without stating which property each supports.
- learn.microsoft.com/en-us/purview/sit-defn-azure-devops-personal-access-tokenprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports Listed as a reference by the legacy contract
Provider documented ·
dossier-research· current · observed 2026-09-23Legacy dossier research (verdict ready, tier T1) cited 3 sources; the dossier does not attribute sources to individual properties.
- redact-secret/redact-secret @ 8b6a5fde52ecb4dfce13f09c7a947062d21483c7: docs/audits/evidence/642/README.mdproject-research-note · last read 2026-09-23 · latest outcome read · supports Final research evidence recorded by the legacy dossier
- learn.microsoft.com/en-us/purview/sit-defn-azure-devops-personal-access-tokenprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports Cited by the legacy dossier research for this family
- learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticateprovider-documentation · last read 2026-10-03 · latest outcome unchanged · supports Cited by the legacy dossier research for this family · #pat-format
Open questions
No open question is recorded for this revision.
Benchmark dossier notes
- Shape
- 84 alphanumeric characters (
[A-Za-z0-9], case-sensitive) with the fixed signatureAZDOat zero-based offsets 76 to 79, so 76 characters, thenAZDO, then 4 characters. The provider says 52 of the 84 are random and does not say what the other 32 hold, so only the length, marker position and alphabet are claims here. - Basis
- T1. The Azure DevOps PAT article states "PATs are 84 characters long" with a fixed
AZDOsignature at positions 76 through 80. Microsoft Purview's sensitive-information-type page gives the alphabet in its detailed pattern. That page's ownFormatsummary says "letters, digits, and special characters", which contradicts the detailed pattern and its worked example; the detailed pattern was followed. The positions wording spans five positions for a four-character marker, and only the zero-based half-open reading fits the Purview example. - Issuance
- not attempted.
- Contract in core
- detector-families.md.
In this benchmark
- Fixtures
- 29
- Left readable
- 0
- Redacted too much
- 0
- False alarms
- 0
29 fixtures: 9 expect a redaction, 17 must stay quiet, 3 record project policy. See every row
| Evidence level | Fixtures | Left readable | Too much | False alarms |
|---|---|---|---|---|
| T1Provider-documented | 21 | 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 | 29 | 11 | 0 | 0 |
| gitleaksRepository scanner · 8.30.1 · Directory scan · default rulesNo rule maps to it | 29 | 10 | 0 | 0 |
| redact-secretProduct measured here · 0.1.0-beta.14 · Published npm package · default detectors1 detector mapped | 29 | 0 | 0 | 0 |
| trufflehogRepository scanner · 3.97.4 · Filesystem scan · verification disabled1 rule targets it | 29 | 12 | 0 | 0 |
Looks like it, but isn't
- Collisions
- the legacy PAT format is a 52-character alphanumeric value with no embedded marker and no distinguishing structure.
Scanner rules for this family
| Scanner | Rule | What the rule matches |
|---|---|---|
| trufflehog · rules 3.97.4 | azuredevopspersonalaccesstoken | azure keyword + 52 characters |
No rule maps to this family in flare-redact, gitleaks, openredaction.
Fixtures in this family
| Fixture | Kind and evidence | redact-secret |
|---|---|---|
azure-devops-personal-access-token-az-devops-login-stdinazure-devops · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
azure-devops-personal-access-token-azdo-marker-bareazure-devops · documented-format-literal | Project policyT3 · Project policy | Redacted |
azure-devops-personal-access-token-azdo-marker-quotedazure-devops · documented-format-literal | Project policyT3 · Project policy | Redacted |
azure-devops-personal-access-token-azdo-marker-unicode-crlfazure-devops · documented-format-literal | Project policyT3 · Project policy | Redacted |
azure-devops-personal-access-token-env-ext-patazure-devops · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
azure-devops-personal-access-token-git-remote-urlazure-devops · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
azure-devops-personal-access-token-github-actions-boards-syncazure-devops · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
azure-devops-personal-access-token-nuget-config-passwordazure-devops · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
azure-devops-personal-access-token-python-sdk-connectionazure-devops · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
azure-devops-personal-access-token-self-hosted-agent-composeazure-devops · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
azure-devops-personal-access-token-shell-export-ext-patazure-devops · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
azure-devops-personal-access-token-terraform-providerazure-devops · documented-format-literal | Must redactT1 · Provider-documented | Redacted |
azure-devops-personal-access-token-azdo-marker-bare-twinazure-devops · wrong-length | Must not flagT1 · Provider-documented · twin | Quiet |
azure-devops-personal-access-token-azdo-marker-quoted-twinazure-devops · wrong-length | Must not flagT1 · Provider-documented · twin | Quiet |
azure-devops-personal-access-token-azdo-marker-signature-bare-twinazure-devops · boundary-violation | Must not flagT1 · Provider-documented · twin | Quiet |
azure-devops-personal-access-token-azdo-marker-signature-quoted-twinazure-devops · boundary-violation | Must not flagT1 · Provider-documented · twin | Quiet |
azure-devops-personal-access-token-azdo-marker-signature-unicode-crlf-twinazure-devops · boundary-violation | Must not flagT1 · Provider-documented · twin | Quiet |
azure-devops-personal-access-token-azdo-marker-unicode-crlf-twinazure-devops · wrong-length | Must not flagT1 · Provider-documented · twin | Quiet |
azure-devops-personal-access-token-env-ext-pat-signature-offset-twinazure-devops · boundary-violation | Must not flagT1 · Provider-documented · twin | Quiet |
azure-devops-personal-access-token-ext-pat-template-placeholderazure-devops · documentation-placeholder | Must not flagT3 · Project policy | Quiet |
azure-devops-personal-access-token-git-remote-url-length-twinazure-devops · wrong-length | Must not flagT1 · Provider-documented · twin | Quiet |
azure-devops-personal-access-token-label-proseazure-devops · benign-lookalike | Must not flagT3 · Project policy | Quiet |
azure-devops-personal-access-token-maskazure-devops · benign-lookalike | Must not flagT3 · Project policy | Quiet |
azure-devops-personal-access-token-missing-markerazure-devops · benign-lookalike | Must not flagT1 · Provider-documented | Quiet |
azure-devops-personal-access-token-nuget-config-password-signature-case-twinazure-devops · boundary-violation | Must not flagT1 · Provider-documented · twin | Quiet |
azure-devops-personal-access-token-pipeline-ids-public-idazure-devops · public-identifier | Must not flagT1 · Provider-documented | Quiet |
azure-devops-personal-access-token-referenceazure-devops · benign-lookalike | Must not flagT3 · Project policy | Quiet |
azure-devops-personal-access-token-rotation-note-proseazure-devops · prose-mention | Must not flagT3 · Project policy | Quiet |
azure-devops-personal-access-token-short-bodyazure-devops · benign-lookalike | Must not flagT1 · Provider-documented | Quiet |
Sources
Documentation and code
- learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate#pat-format
- learn.microsoft.com/en-us/purview/sit-defn-azure-devops-personal-access-token
Research log
- redact-secret/redact-secret#298Research issue
- redact-secret/redact-secret#642Research issue
- Final evidence, pinned to a commit/redact-secret/redact-secret/blob/8b6a5fde52ecb4dfce13f09c7a947062d21483c7/docs/audits/evidence/642/README.md