{"record":{"id":"ecf884a2cf54149f","repo":"moonD4rk/HackBrowserData","slug":"q-w-ecf884","errorCode":null,"errorMessage":"%q: %w","messagePattern":"%q: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"masterkey/retriever_linux.go","lineNumber":69,"sourceCode":"\t\t}\n\t\tfor _, item := range items {\n\t\t\tlabel, err := item.GetLabel()\n\t\t\tif err != nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif label == storage {\n\t\t\t\tsecret, err := item.GetSecret(session.Path())\n\t\t\t\tif err != nil {\n\t\t\t\t\treturn nil, fmt.Errorf(\"get secret for %s: %w\", storage, err)\n\t\t\t\t}\n\t\t\t\tif len(secret.Value) > 0 {\n\t\t\t\t\treturn linuxParams.deriveKey(secret.Value), nil\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn nil, fmt.Errorf(\"%q: %w\", storage, errStorageNotFound)\n}\n\n// PosixRetriever derives Chromium's kV10Key via PBKDF2 over the hardcoded \"peanuts\" password — the\n// deterministic v10 key used when no keyring exists (headless/Docker/CI). Mirrors PosixKeyProvider.\ntype PosixRetriever struct{}\n\nfunc (r *PosixRetriever) RetrieveKey(_ Hints) ([]byte, error) {\n\treturn linuxParams.deriveKey([]byte(\"peanuts\")), nil\n}\n\n// DefaultRetrievers wires the Linux tiers, one per prefix Chromium emits: v10 = PBKDF2(\"peanuts\")\n// (kV10Key, no keyring); v11 = PBKDF2(keyring secret) (kV11Key, via D-Bus). A profile can carry both\n// if the host moved between headless and keyring sessions, so both run independently.\nfunc DefaultRetrievers() Retrievers {\n\treturn Retrievers{\n\t\tV10: &PosixRetriever{},\n\t\tV11: &DBusRetriever{},\n\t}","sourceCodeStart":51,"sourceCodeEnd":87,"githubUrl":"https://github.com/moonD4rk/HackBrowserData/blob/0503d04d7a8d0379d060268a74f1b149e5a0aad5/masterkey/retriever_linux.go#L51-L87","documentation":"The D-Bus tier completed its full scan of all collections and items without finding a secret whose label equals the requested Chromium storage name. This is errStorageNotFound wrapped with the storage label — the keyring simply contains no item named e.g. 'Chromium Safe Storage'.","triggerScenarios":"RetrieveKey iterates every collection/item; no item label matches hints.KeychainLabel exactly (case-sensitive), so it returns the not-found sentinel.","commonSituations":"The browser never ran under a desktop session so it never created a Safe Storage entry (headless/Docker profiles are v10-only); the keyring was reset; the browser stores its secret under a different label than expected; a new/renamed Chromium fork.","solutions":["Confirm the entry exists and its exact label: secret-tool search --all xdg:schema chrome_libsecret_org_chromium_libsecret 'Chromium Safe Storage'","Launch the browser once in a GUI session so it creates the Safe Storage item, then retry","Use the v10 fallback — Linux DefaultRetrievers already includes PosixRetriever, whose PBKDF2(\"peanuts\") key decrypts v10 cookies from keyring-less profiles","Check for a renamed/forked browser whose storage label differs from the hinted KeychainLabel"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"labels, _ := exec.Command(\"secret-tool\", \"search\", \"--all\",\n    \"xdg:schema\", \"chrome_libsecret_org_chromium_libsecret\",\n    \"Chromium Safe Storage\").Output()\nif len(bytes.TrimSpace(labels)) == 0 {\n    // no matching keyring item — skip DBusRetriever, use v10 key\n}","typeGuard":null,"tryCatchPattern":"key, err := dbusRetriever.RetrieveKey(hints)\nif errors.Is(err, errStorageNotFound) || strings.HasSuffix(err.Error(), \"not found\") {\n    key, _ = posixRetriever.RetrieveKey(hints) // v10 PBKDF2(\"peanuts\")\n}","preventionTips":["Launch the browser once in a GUI session so it creates its Safe Storage keyring entry","Verify the exact (case-sensitive) item label with secret-tool search before retrieval","Remember headless/Docker profiles are v10-only and never have keyring entries","Check other collections ('login', 'session', custom) — the item may exist outside the default collection"],"tags":["linux","keyring","not-found","chromium"],"backgroundTag":"record-not-found","analyzedSha":"0503d04d7a8d0379d060268a74f1b149e5a0aad5","analyzedAt":"2026-09-06T13:38:28.707Z","contentChangedAt":"2026-09-06T13:38:28.707Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}