Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

[Bug]: Merchant sample verifies checkout using embedded JWT without independent checkout-hash context

Aperta
#331 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
56/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Attiva
Stack tecnologico
python

Direzione di ricerca

Read code/sdk/python/ap2/sdk/checkout_mandate_chain.py around lines 44–125 and the merchant sample at code/samples/python/src/roles/merchant_agent_mcp/server.py around lines 872–944. Trace how expected_*_hash is checked during verification and how the sample continues processing decoded JWT data. Review the schema at code/sdk/schemas/ap2/*_mandate.json to understand the hash binding; done means verification binds the closed mandate to an independently expected hash before the sample uses its data.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

What happened?

Description

AP2 closed Checkout Mandates contain a merchant-signed checkout_jwt and a checkout_hash that binds the mandate to that checkout.

The Python SDK's CheckoutMandateChain.verify() accepts expected_checkout_hash as optional. If it is omitted, the SDK evaluates checkout constraints against the supplied checkout_jwt but does not check the closed mandate's checkout_hash against an independently expected checkout hash.

The Python Merchant MCP sample passes checkout_jwt=chain.closed_mandate.checkout_jwt but does not pass expected_checkout_hash. It then decodes that embedded JWT payload and continues checkout processing.

Impact

A merchant verifier can validate checkout constraints against checkout data carried inside the closed mandate, rather than binding the mandate to an independently created merchant checkout session.

This weakens the protection against manipulated or unrelated checkout data being used to complete an order.

Steps to Reproduce

  1. Review code/sdk/schemas/ap2/checkout_mandate.json:20-28. checkout_jwt is the merchant-signed checkout payload, and checkout_hash uniquely identifies that JWT.

  2. Review code/sdk/python/ap2/sdk/checkout_mandate_chain.py:44-100. expected_checkout_hash is optional and checkout_hash is checked only when that value is provided.

  3. Review code/sdk/python/ap2/sdk/checkout_mandate_chain.py:112-125. The SDK extracts checkout data by decoding the JWT payload.

  4. Review code/samples/python/src/roles/merchant_agent_mcp/server.py:872-883. The Merchant sample verifies the checkout mandate using checkout_jwt from the closed mandate, without passing expected_checkout_hash.

  5. Review code/samples/python/src/roles/merchant_agent_mcp/server.py:900-944. The sample decodes the embedded checkout JWT payload and continues checkout processing from that data.

Relevant log output

Code of Conduct
  • I agree to follow this project's Code of Conduct
Lingua principale
Python
Stelle
3.2k
Fork
514
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di google-agentic-commerce/AP2

Tutte le issue di google-agentic-commerce/AP2

Issue simili

Altre issue su Python

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.