{"description":"Quotable findings with stable anchor URLs. Cite the url field.","items":[{"article":"How does authorization work for MCP servers?","article_id":"jb-guide-mcp-authorization","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/mcp-authorization/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/mcp-authorization/f-agent-mcp-protected-resource-metadata.png","id":"f-agent-mcp-protected-resource-metadata","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Model Context Protocol, Authorization, revision 2026-07-28","source_url":"https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization","text":"As of MCP revision 2026-07-28, MCP servers must implement OAuth 2.0 Protected Resource Metadata (RFC 9728), and MCP clients must use it to discover the authorization server.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/mcp-authorization/#f-agent-mcp-protected-resource-metadata"},{"article":"How does authorization work for MCP servers?","article_id":"jb-guide-mcp-authorization","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/mcp-authorization/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/mcp-authorization/f-agent-mcp-resource-parameter.png","id":"f-agent-mcp-resource-parameter","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Model Context Protocol, Authorization, revision 2026-07-28","source_url":"https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization","text":"MCP clients must send the RFC 8707 resource parameter with the MCP server’s canonical URI in both authorization and token requests, whether or not the authorization server supports it.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/mcp-authorization/#f-agent-mcp-resource-parameter"},{"article":"How does authorization work for MCP servers?","article_id":"jb-guide-mcp-authorization","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/mcp-authorization/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/mcp-authorization/f-agent-mcp-audience-validation.png","id":"f-agent-mcp-audience-validation","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Model Context Protocol, Authorization, revision 2026-07-28","source_url":"https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization","text":"MCP servers must validate that an access token was issued specifically for them as the intended audience and must not accept or transit any other tokens.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/mcp-authorization/#f-agent-mcp-audience-validation"},{"article":"How does authorization work for MCP servers?","article_id":"jb-guide-mcp-authorization","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/mcp-authorization/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/mcp-authorization/f-agent-mcp-no-token-passthrough.png","id":"f-agent-mcp-no-token-passthrough","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Model Context Protocol, Authorization Security Considerations, revision 2026-07-28","source_url":"https://modelcontextprotocol.io/specification/2026-07-28/basic/authorization/security-considerations","text":"An MCP server that calls upstream APIs must use a separate token from the upstream authorization server and must not pass through the token it received from the MCP client.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/mcp-authorization/#f-agent-mcp-no-token-passthrough"},{"article":"How should people grant and revoke an agent's access?","article_id":"jb-guide-consent-and-revocation","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/consent-and-revocation/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/consent-and-revocation/f-agent-grant-scope-expiry-revoke.png","id":"f-agent-grant-scope-expiry-revoke","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"What I Learned Building an Identity Broker With Coding Agents (janbrennenstuhl.eu, 2026)","source_url":"https://www.janbrennenstuhl.eu/agentic-identity-broker/","text":"In the Agentic Identity Broker, a user grants an agent access to a service with a chosen permission set and an optional expiry, and can revoke that grant at any time.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/consent-and-revocation/#f-agent-grant-scope-expiry-revoke"},{"article":"How should people grant and revoke an agent's access?","article_id":"jb-guide-consent-and-revocation","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/consent-and-revocation/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/consent-and-revocation/f-agent-revocation-cascades-to-grant.png","id":"f-agent-revocation-cascades-to-grant","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 7009, OAuth 2.0 Token Revocation (IETF, 2013), Section 2.1","source_url":"https://www.rfc-editor.org/rfc/rfc7009#section-2.1","text":"Under RFC 7009, revoking a refresh token should also invalidate all access tokens based on the same authorization grant if the authorization server supports access token revocation.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/consent-and-revocation/#f-agent-revocation-cascades-to-grant"},{"article":"How should people grant and revoke an agent's access?","article_id":"jb-guide-consent-and-revocation","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/consent-and-revocation/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/consent-and-revocation/f-agent-self-contained-token-revocation.png","id":"f-agent-self-contained-token-revocation","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 7009, OAuth 2.0 Token Revocation (IETF, 2013), Section 3","source_url":"https://www.rfc-editor.org/rfc/rfc7009#section-3","text":"Immediate revocation of self-contained access tokens needs backend coordination that RFC 7009 calls non-standardized, and short-lived access tokens limit how long a revoked token stays in use.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/consent-and-revocation/#f-agent-self-contained-token-revocation"},{"article":"How should people grant and revoke an agent's access?","article_id":"jb-guide-consent-and-revocation","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/consent-and-revocation/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/consent-and-revocation/f-agent-refresh-token-bound-to-consent.png","id":"f-agent-refresh-token-bound-to-consent","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 9700, Best Current Practice for OAuth 2.0 Security (IETF, 2025), Section 4.14.2","source_url":"https://www.rfc-editor.org/rfc/rfc9700#section-4.14.2","text":"Refresh tokens must be bound to the scope and resource servers the resource owner consented to.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/consent-and-revocation/#f-agent-refresh-token-bound-to-consent"},{"article":"How does OAuth 2.0 Token Exchange keep provider tokens away from agents?","article_id":"jb-guide-token-exchange","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/f-agent-rfc8693-security-token-service.png","id":"f-agent-rfc8693-security-token-service","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 8693, OAuth 2.0 Token Exchange (IETF, 2020), Section 1","source_url":"https://www.rfc-editor.org/rfc/rfc8693#section-1","text":"RFC 8693 lets a client present a security token to an OAuth 2.0 authorization server acting as a Security Token Service and receive a new token, for example one scoped more narrowly for a downstream service.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/#f-agent-rfc8693-security-token-service"},{"article":"How does OAuth 2.0 Token Exchange keep provider tokens away from agents?","article_id":"jb-guide-token-exchange","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/f-agent-broker-provider-token-stays-out.png","id":"f-agent-broker-provider-token-stays-out","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"What I Learned Building an Identity Broker With Coding Agents (janbrennenstuhl.eu, 2026)","source_url":"https://www.janbrennenstuhl.eu/agentic-identity-broker/","text":"In the Agentic Identity Broker, an MCP gateway exchanges the agent’s token for the matching provider token through RFC 8693 on each tool call, so the provider token never reaches the agent.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/#f-agent-broker-provider-token-stays-out"},{"article":"How does OAuth 2.0 Token Exchange keep provider tokens away from agents?","article_id":"jb-guide-token-exchange","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/f-agent-exchange-client-authentication.png","id":"f-agent-exchange-client-authentication","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 8693, OAuth 2.0 Token Exchange (IETF, 2020), Section 2.1","source_url":"https://www.rfc-editor.org/rfc/rfc8693#section-2.1","text":"RFC 8693 warns that without client authentication at the token endpoint, anyone holding a compromised token can trade it for other tokens.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/#f-agent-exchange-client-authentication"},{"article":"How does OAuth 2.0 Token Exchange keep provider tokens away from agents?","article_id":"jb-guide-token-exchange","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/f-agent-act-claim-current-actor.png","id":"f-agent-act-claim-current-actor","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 8693, OAuth 2.0 Token Exchange (IETF, 2020), Section 4.1","source_url":"https://www.rfc-editor.org/rfc/rfc8693#section-4.1","text":"In a JWT issued through token exchange, access control decisions must consider only the top-level claims and the current actor named in the act claim, while nested prior actors are informational.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/#f-agent-act-claim-current-actor"},{"article":"How does OAuth 2.0 Token Exchange keep provider tokens away from agents?","article_id":"jb-guide-token-exchange","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/f-agent-exchange-no-revocation-link.png","id":"f-agent-exchange-no-revocation-link","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 8693, OAuth 2.0 Token Exchange (IETF, 2020), Section 2.1","source_url":"https://www.rfc-editor.org/rfc/rfc8693#section-2.1","text":"A token exchange creates no tight link between the input and output tokens, so passing revocation from one to the other depends on the implementation and isn’t a property of the protocol.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/token-exchange/#f-agent-exchange-no-revocation-link"},{"article":"What is inside a JWT?","article_id":"jb-guide-jwt-anatomy","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/jwt-anatomy/","card":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/jwt-anatomy/f-jwt-claims-in-jws-or-jwe.png","id":"f-jwt-claims-in-jws-or-jwe","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 7519, JSON Web Token (JWT), Section 2","source_url":"https://www.rfc-editor.org/rfc/rfc7519#section-2","text":"A JWT is a set of claims encoded as a JSON object inside a JWS or a JWE, so the same token format can be signed, encrypted, or both.","url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/jwt-anatomy/#f-jwt-claims-in-jws-or-jwe"},{"article":"What is inside a JWT?","article_id":"jb-guide-jwt-anatomy","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/jwt-anatomy/","card":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/jwt-anatomy/f-jwt-payload-is-readable.png","id":"f-jwt-payload-is-readable","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 7519, Section 12, Privacy Considerations","source_url":"https://www.rfc-editor.org/rfc/rfc7519#section-12","text":"The payload of a signed JWT is only base64url-encoded, so a token that carries privacy-sensitive claims needs encryption or must not reach parties who should not read it.","url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/jwt-anatomy/#f-jwt-payload-is-readable"},{"article":"What is inside a JWT?","article_id":"jb-guide-jwt-anatomy","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/jwt-anatomy/","card":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/jwt-anatomy/f-jwt-registered-claims-optional.png","id":"f-jwt-registered-claims-optional","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 7519, Section 4.1","source_url":"https://www.rfc-editor.org/rfc/rfc7519#section-4.1","text":"RFC 7519 registers 7 claim names, iss, sub, aud, exp, nbf, iat and jti, and none of them is mandatory in every case; each application profile decides which it requires.","url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/jwt-anatomy/#f-jwt-registered-claims-optional"},{"article":"What is inside a JWT?","article_id":"jb-guide-jwt-anatomy","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/jwt-anatomy/","card":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/jwt-anatomy/f-jwt-allowlist-algorithms.png","id":"f-jwt-allowlist-algorithms","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 8725, JSON Web Token Best Current Practices, Section 3.1","source_url":"https://www.rfc-editor.org/rfc/rfc8725#section-3.1","text":"JWT libraries must let the caller specify the supported algorithms and must not use any other algorithm, which closes the door on tokens whose header was changed to “none”.","url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/jwt-anatomy/#f-jwt-allowlist-algorithms"},{"article":"What should a password policy require?","article_id":"jb-guide-password-policy-requirements","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-policy-requirements/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-policy-requirements/f-nist-min-length-15.png","id":"f-nist-min-length-15","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"NIST SP 800-63B-4, Section 3.1.1.2","source_url":"https://pages.nist.gov/800-63-4/sp800-63b/authenticators/","text":"NIST SP 800-63B-4 requires passwords used as the only authentication factor to be at least 15 characters long, and at least 8 when the password is used only as part of multi-factor authentication.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-policy-requirements/#f-nist-min-length-15"},{"article":"What should a password policy require?","article_id":"jb-guide-password-policy-requirements","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-policy-requirements/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-policy-requirements/f-nist-no-composition-no-rotation.png","id":"f-nist-no-composition-no-rotation","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"NIST SP 800-63B-4, Section 3.1.1.2","source_url":"https://pages.nist.gov/800-63-4/sp800-63b/authenticators/","text":"Verifiers shall not impose composition rules such as mixing character types, and shall not require periodic password changes, but shall force a change when there is evidence of compromise.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-policy-requirements/#f-nist-no-composition-no-rotation"},{"article":"What should a password policy require?","article_id":"jb-guide-password-policy-requirements","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-policy-requirements/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-policy-requirements/f-nist-blocklist-with-reason.png","id":"f-nist-blocklist-with-reason","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"NIST SP 800-63B-4, Section 3.1.1.2","source_url":"https://pages.nist.gov/800-63-4/sp800-63b/authenticators/","text":"A new password shall be compared in full against a blocklist of commonly used, expected or compromised passwords, and a rejected user shall be told why.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-policy-requirements/#f-nist-blocklist-with-reason"},{"article":"What should a password policy require?","article_id":"jb-guide-password-policy-requirements","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-policy-requirements/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-policy-requirements/f-nist-password-managers.png","id":"f-nist-password-managers","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"NIST SP 800-63B-4, Section 3.1.1.2","source_url":"https://pages.nist.gov/800-63-4/sp800-63b/authenticators/","text":"Verifiers shall allow password managers and autofill, should permit paste, and should accept passwords of at least 64 characters.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-policy-requirements/#f-nist-password-managers"},{"article":"Should an agent use a robot account or delegated access?","article_id":"jb-guide-delegation-vs-robot-accounts","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/delegation-vs-robot-accounts/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/delegation-vs-robot-accounts/f-agent-robot-account-combined-permissions.png","id":"f-agent-robot-account-combined-permissions","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"What I Learned Building an Identity Broker With Coding Agents (janbrennenstuhl.eu, 2026)","source_url":"https://www.janbrennenstuhl.eu/agentic-identity-broker/","text":"When several people share an agent that holds a robot account, the agent acts with the combined permissions of all its users, and nobody can tell whose request was whose.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/delegation-vs-robot-accounts/#f-agent-robot-account-combined-permissions"},{"article":"Should an agent use a robot account or delegated access?","article_id":"jb-guide-delegation-vs-robot-accounts","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/delegation-vs-robot-accounts/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/delegation-vs-robot-accounts/f-agent-delegation-keeps-actor-identity.png","id":"f-agent-delegation-keeps-actor-identity","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 8693, OAuth 2.0 Token Exchange (IETF, 2020), Section 1.1","source_url":"https://www.rfc-editor.org/rfc/rfc8693#section-1.1","text":"Under the delegation semantics of OAuth 2.0 Token Exchange, the acting party keeps its own identity, separate from the person whose rights it uses.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/delegation-vs-robot-accounts/#f-agent-delegation-keeps-actor-identity"},{"article":"Should an agent use a robot account or delegated access?","article_id":"jb-guide-delegation-vs-robot-accounts","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/delegation-vs-robot-accounts/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/delegation-vs-robot-accounts/f-agent-token-least-privilege.png","id":"f-agent-token-least-privilege","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"RFC 9700, Best Current Practice for OAuth 2.0 Security (IETF, 2025), Section 2.3","source_url":"https://www.rfc-editor.org/rfc/rfc9700#section-2.3","text":"The OAuth 2.0 security best current practice says an access token’s privileges should be restricted to the minimum the use case requires, and the token should be audience-restricted to a specific resource server.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/delegation-vs-robot-accounts/#f-agent-token-least-privilege"},{"article":"Should an agent use a robot account or delegated access?","article_id":"jb-guide-delegation-vs-robot-accounts","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/delegation-vs-robot-accounts/","card":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/delegation-vs-robot-accounts/f-agent-no-long-lived-keys.png","id":"f-agent-no-long-lived-keys","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"AppSec in the Age of Agentic Engineering (janbrennenstuhl.eu, 2026)","source_url":"https://www.janbrennenstuhl.eu/appsec-agentic-engineering/","text":"Coding agents should not hold persistent identity and access management (IAM) roles or long-lived API keys; an identity broker can issue short-lived, task-scoped credentials on demand instead.","url":"https://www.janbrennenstuhl.eu/knowledge-base/agent-identity/delegation-vs-robot-accounts/#f-agent-no-long-lived-keys"},{"article":"What I Learned Building an Identity Broker With Coding Agents","article_id":"jb-agentic-identity-broker","article_url":"https://www.janbrennenstuhl.eu/agentic-identity-broker/","card":"https://www.janbrennenstuhl.eu/agentic-identity-broker/f-aib-spec-first.png","id":"f-aib-spec-first","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-09-24","source":"","source_url":"","text":"A Spec Kit constitution, feature specs and architecture decision records kept in the repository gave agents the same project knowledge through 6 harness switches and 9 models over 10 months.","url":"https://www.janbrennenstuhl.eu/agentic-identity-broker/#f-aib-spec-first"},{"article":"What I Learned Building an Identity Broker With Coding Agents","article_id":"jb-agentic-identity-broker","article_url":"https://www.janbrennenstuhl.eu/agentic-identity-broker/","card":"https://www.janbrennenstuhl.eu/agentic-identity-broker/f-aib-tests-fail-first.png","id":"f-aib-tests-fail-first","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-09-24","source":"","source_url":"","text":"Early 2026 models regularly produced green test suites for broken behavior, so the broker’s constitution requires red-green-refactor test-driven development and an end-to-end test for every spec.","url":"https://www.janbrennenstuhl.eu/agentic-identity-broker/#f-aib-tests-fail-first"},{"article":"What I Learned Building an Identity Broker With Coding Agents","article_id":"jb-agentic-identity-broker","article_url":"https://www.janbrennenstuhl.eu/agentic-identity-broker/","card":"https://www.janbrennenstuhl.eu/agentic-identity-broker/f-aib-review-base-branch.png","id":"f-aib-review-base-branch","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-09-24","source":"","source_url":"","text":"Reviewing agent-written code takes more agents than writing it, and the broker’s architecture review agent reads its rules from the base branch so a pull request cannot rewrite them.","url":"https://www.janbrennenstuhl.eu/agentic-identity-broker/#f-aib-review-base-branch"},{"article":"Guest Lecture at HTW Berlin: AppSec in the Age of Agentic Engineering","article_id":"jb-htw-berlin-agentic-appsec","article_url":"https://www.janbrennenstuhl.eu/new-appsec-operating-model/","card":"https://www.janbrennenstuhl.eu/new-appsec-operating-model/f-htw-in-session-feedback.png","id":"f-htw-in-session-feedback","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-07-03","source":"","source_url":"","text":"Security feedback should reach the coding agent while the task is still in its context, and tickets should be kept for failed in-session fixes and findings in deployed artifacts.","url":"https://www.janbrennenstuhl.eu/new-appsec-operating-model/#f-htw-in-session-feedback"},{"article":"Guest Lecture at HTW Berlin: AppSec in the Age of Agentic Engineering","article_id":"jb-htw-berlin-agentic-appsec","article_url":"https://www.janbrennenstuhl.eu/new-appsec-operating-model/","card":"https://www.janbrennenstuhl.eu/new-appsec-operating-model/f-htw-harness-control.png","id":"f-htw-harness-control","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-07-03","source":"","source_url":"","text":"Google’s New SDLC whitepaper estimates an agent at roughly 10% model and 90% harness, and the harness is where an AppSec team has the most control.","url":"https://www.janbrennenstuhl.eu/new-appsec-operating-model/#f-htw-harness-control"},{"article":"Guest Lecture at HTW Berlin: AppSec in the Age of Agentic Engineering","article_id":"jb-htw-berlin-agentic-appsec","article_url":"https://www.janbrennenstuhl.eu/new-appsec-operating-model/","card":"https://www.janbrennenstuhl.eu/new-appsec-operating-model/f-htw-agent-sandbox.png","id":"f-htw-agent-sandbox","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-07-03","source":"","source_url":"","text":"Agent tasks should run in disposable sandboxes such as nono or Firecracker microVMs with short-lived, task-scoped credentials, because a warning in a rule file does not stop prompt injection.","url":"https://www.janbrennenstuhl.eu/new-appsec-operating-model/#f-htw-agent-sandbox"},{"article":"Shift Down: Why Agentic Engineering Demands Platform-Level Security","article_id":"jb-appsec-shift-down","article_url":"https://www.janbrennenstuhl.eu/shift-down-appsec/","card":"https://www.janbrennenstuhl.eu/shift-down-appsec/f-shift-down-platform-defaults.png","id":"f-shift-down-platform-defaults","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-06-14","source":"","source_url":"","text":"Shift-down security replaces per-team security decisions with platform defaults, such as one standard pipeline that verifies, tests, scans, signs and deploys every service.","url":"https://www.janbrennenstuhl.eu/shift-down-appsec/#f-shift-down-platform-defaults"},{"article":"Shift Down: Why Agentic Engineering Demands Platform-Level Security","article_id":"jb-appsec-shift-down","article_url":"https://www.janbrennenstuhl.eu/shift-down-appsec/","card":"https://www.janbrennenstuhl.eu/shift-down-appsec/f-shift-down-webservice-resource.png","id":"f-shift-down-webservice-resource","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-06-14","source":"","source_url":"","text":"A platform-owned WebService resource can deploy a hardened container from a managed base image with mutual TLS, workload identity and egress policies, leaving teams no Dockerfile, pipeline YAML or security context to misconfigure.","url":"https://www.janbrennenstuhl.eu/shift-down-appsec/#f-shift-down-webservice-resource"},{"article":"Shift Down: Why Agentic Engineering Demands Platform-Level Security","article_id":"jb-appsec-shift-down","article_url":"https://www.janbrennenstuhl.eu/shift-down-appsec/","card":"https://www.janbrennenstuhl.eu/shift-down-appsec/f-shift-down-upgrade-once.png","id":"f-shift-down-upgrade-once","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-06-14","source":"","source_url":"","text":"When security lives in the platform, fixing a vulnerability class means upgrading the platform once instead of patching hundreds of services individually.","url":"https://www.janbrennenstuhl.eu/shift-down-appsec/#f-shift-down-upgrade-once"},{"article":"Dependency Updates: latest Is Not a Security Strategy","article_id":"jb-automatic-dependency-updates","article_url":"https://www.janbrennenstuhl.eu/dependency-updates/","card":"https://www.janbrennenstuhl.eu/dependency-updates/f-deps-pin-exact-versions.png","id":"f-deps-pin-exact-versions","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-05-15","source":"","source_url":"","text":"A version range like ^1.14.0 trusts every future matching release, which the Axios attackers used in 2026, so teams should pin exact versions and force transitive ones with overrides.","url":"https://www.janbrennenstuhl.eu/dependency-updates/#f-deps-pin-exact-versions"},{"article":"Dependency Updates: latest Is Not a Security Strategy","article_id":"jb-automatic-dependency-updates","article_url":"https://www.janbrennenstuhl.eu/dependency-updates/","card":"https://www.janbrennenstuhl.eu/dependency-updates/f-deps-7-day-cooldown.png","id":"f-deps-7-day-cooldown","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-05-15","source":"","source_url":"","text":"According to Wiz, a 7-day release-age cooldown covers 90% or more of recent supply chain incidents, and it would have blocked both the Axios and TanStack compromises.","url":"https://www.janbrennenstuhl.eu/dependency-updates/#f-deps-7-day-cooldown"},{"article":"Dependency Updates: latest Is Not a Security Strategy","article_id":"jb-automatic-dependency-updates","article_url":"https://www.janbrennenstuhl.eu/dependency-updates/","card":"https://www.janbrennenstuhl.eu/dependency-updates/f-deps-provenance-not-enough.png","id":"f-deps-provenance-not-enough","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-05-15","source":"","source_url":"","text":"The TanStack worm shipped malicious npm packages with valid SLSA Build Level 3 attestations, so provenance verification is necessary but not enough on its own.","url":"https://www.janbrennenstuhl.eu/dependency-updates/#f-deps-provenance-not-enough"},{"article":"AppSec in the Age of Agentic Engineering","article_id":"jb-appsec-agentic-engineering","article_url":"https://www.janbrennenstuhl.eu/appsec-agentic-engineering/","card":"https://www.janbrennenstuhl.eu/appsec-agentic-engineering/f-appsec-agentic-backlog.png","id":"f-appsec-agentic-backlog","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-05-14","source":"","source_url":"","text":"In Edgescan’s 2025 report, enterprises with more than 1,000 employees still had 45.4% of the vulnerabilities discovered within 12 months open, and the high and critical findings most likely to be exploited took 115.7 days on average to fix.","url":"https://www.janbrennenstuhl.eu/appsec-agentic-engineering/#f-appsec-agentic-backlog"},{"article":"AppSec in the Age of Agentic Engineering","article_id":"jb-appsec-agentic-engineering","article_url":"https://www.janbrennenstuhl.eu/appsec-agentic-engineering/","card":"https://www.janbrennenstuhl.eu/appsec-agentic-engineering/f-appsec-agentic-risk-budget.png","id":"f-appsec-agentic-risk-budget","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-05-14","source":"","source_url":"","text":"A risk budget sets how long a high-risk, reachable vulnerability may stay open in production before it burns the service’s error budget, and reachability analysis keeps a CVE in dead code from counting.","url":"https://www.janbrennenstuhl.eu/appsec-agentic-engineering/#f-appsec-agentic-risk-budget"},{"article":"AppSec in the Age of Agentic Engineering","article_id":"jb-appsec-agentic-engineering","article_url":"https://www.janbrennenstuhl.eu/appsec-agentic-engineering/","card":"https://www.janbrennenstuhl.eu/appsec-agentic-engineering/f-appsec-agentic-sandbox-first.png","id":"f-appsec-agentic-sandbox-first","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"publication","review_status":"reviewed","reviewed":"2026-05-14","source":"","source_url":"","text":"The first step is to sandbox the coding agents engineers already run and replace their long-lived credentials with short-lived, task-scoped ones, because the exposure exists as soon as an agent runs on an engineer’s machine.","url":"https://www.janbrennenstuhl.eu/appsec-agentic-engineering/#f-appsec-agentic-sandbox-first"},{"article":"Where do OpenID Connect implementations break?","article_id":"jb-research-oidc-security","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/openid-connect-security/","card":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/openid-connect-security/f-oidc-certified-12-flaws.png","id":"f-oidc-certified-12-flaws","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Fries, Security Analysis of Real-Life OpenID Connect Implementations (Master's thesis, Ruhr-University Bochum, 2020)","source_url":"https://www.nds.ruhr-uni-bochum.de/media/ei/arbeiten/2021/05/03/masterthesis.pdf","text":"Testing 6 OpenID Certified identity providers and 8 service providers against 11 service provider attacks and 7 identity provider attacks uncovered 12 implementation flaws.","url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/openid-connect-security/#f-oidc-certified-12-flaws"},{"article":"Where do OpenID Connect implementations break?","article_id":"jb-research-oidc-security","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/openid-connect-security/","card":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/openid-connect-security/f-oidc-spec-flaws.png","id":"f-oidc-spec-flaws","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Mladenov and Mainka, OpenID Connect Security Considerations (Ruhr-University Bochum, 2017)","source_url":"https://www.nds.ruhr-uni-bochum.de/media/ei/veroeffentlichungen/2017/01/13/OIDCSecurity_1.pdf","text":"Mladenov and Mainka classify session overwriting and IdP confusion as flaws in the OpenID Connect specification itself, separate from implementation bugs.","url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/openid-connect-security/#f-oidc-spec-flaws"},{"article":"Where do OpenID Connect implementations break?","article_id":"jb-research-oidc-security","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/openid-connect-security/","card":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/openid-connect-security/f-oidc-attacker-needs-no-network.png","id":"f-oidc-attacker-needs-no-network","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Mladenov and Mainka, OpenID Connect Security Considerations (Ruhr-University Bochum, 2017)","source_url":"https://www.nds.ruhr-uni-bochum.de/media/ei/veroeffentlichungen/2017/01/13/OIDCSecurity_1.pdf","text":"The attacks in the OpenID Connect Security Considerations report work for a web attacker who sends ordinary HTTP requests and has no control over the network.","url":"https://www.janbrennenstuhl.eu/knowledge-base/oidc/openid-connect-security/#f-oidc-attacker-needs-no-network"},{"article":"Do password strength meters work?","article_id":"jb-research-password-policy","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/f-meter-important-accounts.png","id":"f-meter-important-accounts","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Egelman et al., Does My Password Go up to Eleven? (CHI 2013)","source_url":"https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/chi13b.pdf","text":"Password meters produced significantly stronger passwords when people had to change their real passwords on important accounts.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/#f-meter-important-accounts"},{"article":"Do password strength meters work?","article_id":"jb-research-password-policy","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/f-meter-unimportant-no-effect.png","id":"f-meter-unimportant-no-effect","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Egelman et al., Does My Password Go up to Eleven? (CHI 2013)","source_url":"https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/chi13b.pdf","text":"When people created a password for an unimportant account, meters made no observable difference because they reused weak passwords from similar low-risk accounts.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/#f-meter-unimportant-no-effect"},{"article":"Do password strength meters work?","article_id":"jb-research-password-policy","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/f-meter-inconsistent-labels.png","id":"f-meter-inconsistent-labels","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"de Carné de Carnavalet and Mannan, From Very Weak to Very Strong: Analyzing Password-Strength Meters (NDSS 2014)","source_url":"https://xavier2dc.fr/papers/password-meters-ndss2014.pdf","text":"Password meters at popular web services gave highly inconsistent ratings for the same password and labeled many weak passwords as strong or even very strong.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/#f-meter-inconsistent-labels"},{"article":"Do password strength meters work?","article_id":"jb-research-password-policy","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/f-meter-zxcvbn-1-5mb.png","id":"f-meter-zxcvbn-1-5mb","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Wheeler, zxcvbn: Low-Budget Password Strength Estimation (USENIX Security 2016)","source_url":"https://www.usenix.org/system/files/conference/usenixsecurity16/sec16_paper_wheeler.pdf","text":"A strength estimator with 1.5 MB of compressed data can accurately estimate the best-known guessing attacks up to 10^5 guesses.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/#f-meter-zxcvbn-1-5mb"},{"article":"Do password strength meters work?","article_id":"jb-research-password-policy","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/f-meter-policy-strength-length.png","id":"f-meter-policy-strength-length","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Tan et al., Practical Recommendations for Stronger, More Usable Passwords (CCS 2020)","source_url":"https://dl.acm.org/doi/pdf/10.1145/3372297.3417882","text":"Researchers recommend combining minimum-strength and minimum-length password requirements for high-value accounts, and found that adding blocklists provides no further gains.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-strength-meter/#f-meter-policy-strength-length"},{"article":"Do login challenges and risk scoring stop account takeover?","article_id":"jb-research-reinforced-authentication","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/f-login-device-challenge-94pct.png","id":"f-login-device-challenge-94pct","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Doerfler et al., Evaluating Login Challenges as a Defense Against Account Takeover (WWW 2019)","source_url":"https://damonmccoy.com/papers/loginchallenges.pdf","text":"Device-based login challenges blocked over 94% of hijacking attempts rooted in phishing and 100% of automated hijacking attempts.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/#f-login-device-challenge-94pct"},{"article":"Do login challenges and risk scoring stop account takeover?","article_id":"jb-research-reinforced-authentication","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/f-login-knowledge-challenge-10pct.png","id":"f-login-knowledge-challenge-10pct","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Doerfler et al., Evaluating Login Challenges as a Defense Against Account Takeover (WWW 2019)","source_url":"https://damonmccoy.com/papers/loginchallenges.pdf","text":"Knowledge-based login challenges prevented as few as 10% of hijacking attempts rooted in phishing.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/#f-login-knowledge-challenge-10pct"},{"article":"Do login challenges and risk scoring stop account takeover?","article_id":"jb-research-reinforced-authentication","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/f-login-challenge-friction-52pct.png","id":"f-login-challenge-friction-52pct","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Doerfler et al., Evaluating Login Challenges as a Defense Against Account Takeover (WWW 2019)","source_url":"https://damonmccoy.com/papers/loginchallenges.pdf","text":"Login challenges caused 52% of legitimate users to fail to sign in, although 97% got into their account within a short period.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/#f-login-challenge-friction-52pct"},{"article":"Do login challenges and risk scoring stop account takeover?","article_id":"jb-research-reinforced-authentication","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/f-login-risk-score-recall-89pct.png","id":"f-login-risk-score-recall-89pct","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Freeman et al., Who Are You? A Statistical Approach to Measuring User Authenticity (NDSS 2016)","source_url":"https://www.ndss-symposium.org/wp-content/uploads/2017/09/who-are-you-statistical-approach-measuring-user-authenticity.pdf","text":"A statistical login classifier using IP and user-agent history reached a recall of up to 89% at a 10% false-positive rate on LinkedIn login data.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/#f-login-risk-score-recall-89pct"},{"article":"Do login challenges and risk scoring stop account takeover?","article_id":"jb-research-reinforced-authentication","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/f-login-protect-frequent-guesses.png","id":"f-login-protect-frequent-guesses","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Tian, Herley and Schechter, StopGuessing: Using Guessed Passwords to Thwart Online Guessing","source_url":"https://www.microsoft.com/en-us/research/uploads/prod/2018/06/stopGuessingTR.pdf","text":"If you can implement only one defence against online guessing, protect users whose passwords attackers guess frequently more aggressively than others.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/reinforced-authentication/#f-login-protect-frequent-guesses"},{"article":"How common is password reuse?","article_id":"jb-research-password-reuse","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/f-pw-reuse-43-51pct.png","id":"f-pw-reuse-43-51pct","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Das et al., The Tangled Web of Password Reuse (NDSS 2014)","source_url":"https://www.ndss-symposium.org/wp-content/uploads/2017/09/06_1_1.pdf","text":"An estimated 43-51% of users reuse the same password across multiple sites.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/#f-pw-reuse-43-51pct"},{"article":"How common is password reuse?","article_id":"jb-research-password-reuse","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/f-pw-reuse-cross-site-guessing.png","id":"f-pw-reuse-cross-site-guessing","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Das et al., The Tangled Web of Password Reuse (NDSS 2014)","source_url":"https://www.ndss-symposium.org/wp-content/uploads/2017/09/06_1_1.pdf","text":"With a user’s password from another site, a cross-site guessing algorithm guessed 30% of transformed passwords within 100 attempts, compared with 14% for a standard guessing algorithm.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/#f-pw-reuse-cross-site-guessing"},{"article":"How common is password reuse?","article_id":"jb-research-password-reuse","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/f-pw-reuse-partial-60pct.png","id":"f-pw-reuse-partial-60pct","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Pearman et al., Let's Go in for a Closer Look: Observing Passwords in Their Natural Habitat (CCS 2017)","source_url":"https://dl.acm.org/doi/pdf/10.1145/3133956.3133973","text":"When researchers observed 154 people’s real logins for an average of 147 days, about 60% of their unique passwords were exactly or partially reused.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/#f-pw-reuse-partial-60pct"},{"article":"How common is password reuse?","article_id":"jb-research-password-reuse","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/f-pw-reuse-frequent-entry.png","id":"f-pw-reuse-frequent-entry","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Wash et al., Understanding Password Choices (SOUPS 2016)","source_url":"https://www.usenix.org/system/files/conference/soups2016/soups2016-paper-wash.pdf","text":"People reuse each password on 1.7-3.4 websites, and they mostly reuse the complex passwords they have to enter frequently.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/#f-pw-reuse-frequent-entry"},{"article":"How common is password reuse?","article_id":"jb-research-password-reuse","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/f-pw-reuse-notifications-third.png","id":"f-pw-reuse-notifications-third","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Golla et al., Designing Password-Reuse Notifications (CCS 2018)","source_url":"https://dl.acm.org/doi/pdf/10.1145/3243734.3243767","text":"Fewer than a third of people shown a typical password-reuse notification said they intended to change any passwords.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/password-reuse/#f-pw-reuse-notifications-third"},{"article":"How do you protect accounts from stolen credentials?","article_id":"jb-research-compromised-credentials","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/credential-stuffing/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/credential-stuffing/f-cred-breached-logins-1-5pct.png","id":"f-cred-breached-logins-1-5pct","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Thomas et al., Protecting accounts from credential stuffing with password breach alerting (USENIX Security 2019)","source_url":"https://www.usenix.org/system/files/sec19-thomas.pdf","text":"Telemetry from nearly 670,000 users and 21 million logins showed that 1.5% of logins on the web involve breached credentials.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/credential-stuffing/#f-cred-breached-logins-1-5pct"},{"article":"How do you protect accounts from stolen credentials?","article_id":"jb-research-compromised-credentials","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/credential-stuffing/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/credential-stuffing/f-cred-alert-26pct-new-password.png","id":"f-cred-alert-26pct-new-password","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Thomas et al., Protecting accounts from credential stuffing with password breach alerting (USENIX Security 2019)","source_url":"https://www.usenix.org/system/files/sec19-thomas.pdf","text":"26% of breach warnings shown at login led users to switch to a new password at least as strong as the original.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/credential-stuffing/#f-cred-alert-26pct-new-password"},{"article":"How do you protect accounts from stolen credentials?","article_id":"jb-research-compromised-credentials","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/credential-stuffing/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/credential-stuffing/f-cred-google-match-7-25pct.png","id":"f-cred-google-match-7-25pct","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Thomas et al., Data Breaches, Phishing, or Malware? (CCS 2017)","source_url":"https://dl.acm.org/doi/pdf/10.1145/3133956.3134067","text":"Between 7% and 25% of passwords exposed through breaches, phishing kits and keyloggers matched the victim’s Google account.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/credential-stuffing/#f-cred-google-match-7-25pct"},{"article":"How do you protect accounts from stolen credentials?","article_id":"jb-research-compromised-credentials","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/credential-stuffing/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/credential-stuffing/f-cred-hash-prefix-12x.png","id":"f-cred-hash-prefix-12x","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Li et al., Protocols for Checking Compromised Credentials (CCS 2019)","source_url":"https://rist.tech.cornell.edu/papers/c3.pdf","text":"In some contexts, the hash prefixes that common breach-checking services receive make remote guessing attacks 12 times more effective.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/credential-stuffing/#f-cred-hash-prefix-12x"},{"article":"How secure are email-based password resets?","article_id":"jb-research-account-recovery","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-recovery/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-recovery/f-recovery-72pct-weakness.png","id":"f-recovery-72pct-weakness","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Innocenti et al., You've Got (a Reset) Mail (DIMVA 2021)","source_url":"https://kharraz.org/publications/dimva2021youvegotmail.pdf","text":"In a study of 366 popular websites, 72% of account recovery mechanisms had at least one implementation weakness.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-recovery/#f-recovery-72pct-weakness"},{"article":"How secure are email-based password resets?","article_id":"jb-research-account-recovery","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-recovery/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-recovery/f-recovery-40pct-multiple-tokens.png","id":"f-recovery-40pct-multiple-tokens","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Innocenti et al., You've Got (a Reset) Mail (DIMVA 2021)","source_url":"https://kharraz.org/publications/dimva2021youvegotmail.pdf","text":"40% of the websites studied generated multiple valid password reset tokens at the same time.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-recovery/#f-recovery-40pct-multiple-tokens"},{"article":"How secure are email-based password resets?","article_id":"jb-research-account-recovery","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-recovery/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-recovery/f-recovery-45pct-no-notification.png","id":"f-recovery-45pct-no-notification","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Innocenti et al., You've Got (a Reset) Mail (DIMVA 2021)","source_url":"https://kharraz.org/publications/dimva2021youvegotmail.pdf","text":"45% of the websites studied did not notify the account owner after a password change, so an unauthorised reset went unnoticed.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-recovery/#f-recovery-45pct-no-notification"},{"article":"How secure are email-based password resets?","article_id":"jb-research-account-recovery","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-recovery/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-recovery/f-recovery-13pct-owasp.png","id":"f-recovery-13pct-owasp","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Innocenti et al., You've Got (a Reset) Mail (DIMVA 2021)","source_url":"https://kharraz.org/publications/dimva2021youvegotmail.pdf","text":"Only 13% of the websites studied followed the OWASP guidelines for password reset.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-recovery/#f-recovery-13pct-owasp"},{"article":"How do attackers take over accounts?","article_id":"jb-research-account-hijacking","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-takeover/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-takeover/f-hijack-prehijack-35-of-75.png","id":"f-hijack-prehijack-35-of-75","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Sudhodanan and Paverd, Pre-hijacked accounts (USENIX Security 2022)","source_url":"https://arxiv.org/pdf/2205.10174.pdf","text":"At least 35 of 75 popular online services were vulnerable to one or more account pre-hijacking attacks.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-takeover/#f-hijack-prehijack-35-of-75"},{"article":"How do attackers take over accounts?","article_id":"jb-research-account-hijacking","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-takeover/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-takeover/f-hijack-prehijack-email-only.png","id":"f-hijack-prehijack-email-only","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Sudhodanan and Paverd, Pre-hijacked accounts (USENIX Security 2022)","source_url":"https://arxiv.org/pdf/2205.10174.pdf","text":"In an account pre-hijacking attack, an attacker who knows only the victim’s email address acts before the victim creates an account and gains access after the victim has signed up.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-takeover/#f-hijack-prehijack-email-only"},{"article":"How do attackers take over accounts?","article_id":"jb-research-account-hijacking","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-takeover/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-takeover/f-hijack-hire-5-of-27.png","id":"f-hijack-hire-5-of-27","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Mirian et al., Hack for Hire (WWW 2019)","source_url":"https://dl.acm.org/doi/pdf/10.1145/3308558.3313489","text":"Of 27 hack-for-hire services that researchers approached as buyers, only 5 succeeded in attacking the email accounts of the test identities.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-takeover/#f-hijack-hire-5-of-27"},{"article":"How do attackers take over accounts?","article_id":"jb-research-account-hijacking","article_url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-takeover/","card":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-takeover/f-hijack-hire-phishing-sms-2fa.png","id":"f-hijack-hire-phishing-sms-2fa","license":"https://creativecommons.org/licenses/by/4.0/","review_basis":"","review_status":"not-reviewed","reviewed":"","source":"Mirian et al., Hack for Hire (WWW 2019)","source_url":"https://dl.acm.org/doi/pdf/10.1145/3308558.3313489","text":"Hack-for-hire attackers relied mainly on tailored phishing messages that were sophisticated enough to bypass SMS two-factor authentication.","url":"https://www.janbrennenstuhl.eu/knowledge-base/account-security/account-takeover/#f-hijack-hire-phishing-sms-2fa"}],"schema_version":"1.0","site":"https://www.janbrennenstuhl.eu/"}