외부 테스터가 x402 엔드포인트에서 발견한 9가지 문제점과 모든 수정 사항
요약
외부 테스터가 Kilawatt Cloud의 x402 GPU 엔드포인트에서 발견한 9가지 문제점과 수정 사항을 공유합니다. 이 중 일부는 구매자에게 금전적 손실을 입힐 수 있는 심각한 결제 및 처리 오류를 포함했습니다. 개발팀은 이러한 문제를 신속하게 코드 레벨에서 모두 수정했으며, 주요 수정 사항들을 재확인하여 서비스 안정성을 높였습니다.
핵심 포인트
- GPU 엔드포인트의 9가지 문제점과 해결 과정을 공유함.
- 형식 오류 요청이 기본 작업으로 처리되어 비용 손실 위험이 있었음.
- 재전송된 결제에 대한 명확한 충돌(conflict) 처리가 필요함.
- 개발팀은 발견된 모든 문제를 코드 레벨에서 수정 완료.
10월 10일, 외부 테스터 한 명이 Kilawatt Cloud의 x402 pay-per-job GPU 엔드포인트를 테스트했습니다. 저희는 그들의 지갑으로 소량의 USDC를 보냈습니다. 그들은 1센트에 60초 분량의 GPU 작업을 구매한 후, 이 엔드포인트가 문제가 발생했을 때 어떻게 작동하는지에 대한 9가지 발견 사항을 보내왔습니다. 이 중 두 가지는 구매자에게 금전적 손실을 입힐 수 있었습니다.
저희는 이 9가지 문제를 몇 시간 만에 코드 내에서 모두 수정했습니다. 이후 저희가 확인한 8가지 주요 수정 사항 중 5가지는 라이브 서비스와 대조하여 재확인했습니다. 나머지 3가지는 검증을 위해 유료 호출이 필요합니다. 본 게시물은 아직 입증되지 않은 부분까지 포함한 전체 기록입니다.
구매자에게 금전적 손실을 줄 수 있는 두 가지 문제점
1. 형식이 잘못된 JSON이 기본 H100 작업으로 처리됨. 본문(body)에 오류가 있는 요청이 거부되지 않았습니다. 대신 약 38센트의 비용으로 기본 H100 작업으로 조용히 가격 책정되었습니다. 결제를 자동으로 진행하는 에이전트는 자신이 요청하지 않은 작업에 대한 대금을 지불했을 수 있습니다.
2. 재전송된 결제가 모호한 402 오류를 반환함. 이미 정산된(settled) 결제를 다시 보내도 명확한 충돌(conflict)을 반환하지 않았습니다. 응답을 놓친 클라이언트는
⚠️ [IMG:N] 형식 토큰은 이미지 placeholder 입니다. 번역하지 말고 원래 위치에 그대로 유지하세요.
| # | 테스터가 발견한 문제점 (What the tester found) | 변경된 사항 (What changed) | 확인 여부 (Checked) |
|---|---|---|---|
| 1 | 기본 H100 작업으로 인용된 깨지거나 JSON이 아닌 요청 (Broken or non-JSON requests quoted as a default H100 job) | 본문(Body)을 먼저 구문 분석합니다. 유효하지 않은 JSON, 객체나 배열이 아닌 경우 400 invalid_json을 반환합니다. 잘못된 콘텐츠 타입은 415를 반환합니다. 빈 본문은 여전히 기본값이 문서화됩니다. | 실시간 (Live) |
| ... | |||
| "Live"는 우리가 10월 11일에 공개 서비스에 요청을 보내고 응답을 읽었다는 의미입니다. "Code"는 변경 사항이 소스코드에 있으며 아직 실제 서비스에서 실행되지 않았다는 의미입니다. 항목들은 테스터의 순서가 아닌, 저희 수정 순서대로 번호가 매겨져 있습니다. |
실시간으로 재확인한 내용 (How we re-checked the live ones)
이것들은 직접 실행해 볼 수 있습니다. 비용이 들지 않는 일반적인 요청입니다.
# 본문 형식이 잘못된 경우와 빈 배열: 코드 invalid_json과 함께 400을 예상합니다
curl -si -X POST https://www.kilawattcloud.dev/api/public/x402/exec \
-H "Content-Type: application/json" -d '[1,2,3]'
...
10월 11일 05:05부터 05:10 UTC 사이에 이 요청들은 400 invalid_json, 415, 405와 Allow: POST, OPTIONS를 반환했고, 200 JSON 매니페스트를 반환했습니다. 알 수 없는 GPU 이름은 16개의 유효한 이름을 포함하며 400을 반환했습니다. 키 없이 요청된 작업 영수증(job receipt)은 401을 반환했습니다. 계정 자체의 키로 요청했을 때는 200과 함께 새로운 타이밍 필드와 내부 결제 ID가 없는 것을 반환했습니다.
1,200초짜리 작업 영수증의 경우, 새로운 필드는 다음과 같이 읽혔습니다: created 03:28:24, ready 03:29:05, ended 03:49:02, runtime 1,238 seconds. 이 실행 시간(runtime)에는 예약이 만료된 후 기기가 종료되기까지의 짧은 지연 시간이 포함됩니다.
우리가 증명하지 못한 것 (What we have not proven)
- 세 가지 헤드라인 수정 사항은 라이브 검증되지 않았습니다. 리플레이 409,
price_changed코드 및 쇼트-월렛(short-wallet) 코드는 소스에 있습니다. 이를 라이브로 확인하려면 유료 통화 또는 의도적으로 실패한 결제가 필요합니다. 이들은 코드만 표시되어 있습니다. - 항목 4는 부분적으로만 수정되었습니다. 하나의 통합 코드가 자금이 부족한 월렛과 잘못된 서명을 모두 처리합니다. 구매자는 어느 쪽 문제였는지 알 수 없습니다.
- 공급자 비용이 여전히 보입니다. 청구 금액의 가장 가까운 10퍼센트로 반올림되어 근사치로 표시됩니다. 구매자가 이를 통해 우리의 마진을 추정할 수 있습니다.
- 테스트되지 않은 경로들. 결제 후 용량이 없을 때의 환불, 초과 지불에 대한 크레딧, 그리고 응답 손실 후 일회성 API 키 복구 경로는 이번 라운드에서 테스트되지 않았습니다.
- 테스터 한 명, 유료 작업 하나. 우리는 테스터의 신원이나 주장을 검증하지 않았으며, 이것은 침투 테스트나 보안 감사가 아닙니다.
- 지연된 것은 테스터의 말입니다. 그들은 잘못된 수신자 또는 네트워크에서의 거부, 스키마 유효성 검사(schema validation), CORS, 속도 제한(rate limiting) 및 가격 재견적 가드(price re-quote guard)가 올바르게 작동했다고 보고했습니다. 우리는 이 보고서에 대해 해당 사항들을 다시 테스트하지 않았습니다.
x402 엔드포인트를 구축할 때의 교훈
- 가격 책정 전에 본문을 구문 분석하세요. 깨진 요청에 대한 기본 견적은 미관상의 버그가 아니라 금전적인 버그입니다.
- 리플레이를 지루하게 만드세요. 원본 거래와 함께 명확한 409 응답을 반환하여, 응답을 놓친 클라이언트가 복구할 수 있도록 하세요.
- 모든 실패에 안정적인 기계 판독 가능 코드를 부여하세요.
price_changed,unknown_gpu_type및wrong_payment_header는 추가하기 쉽고 에이전트들이 추측하는 것을 방지합니다. - 발견 매니페스트(discovery manifest)를 게시하고 잘못된 메서드에 대해서도 JSON을 반환하세요. 에이전트는 웹사이트 HTML을 구문 분석할 필요가 없어야 합니다.
- 영수증에 시간을 기록하세요.
ready_at,ended_at및runtime_seconds는 구매자가 자신이 무엇에 대해 지불했는지 감사(audit)할 수 있게 해줍니다. - 구매자 응답에서 내부 ID나 정확한 비용을 유출하지 마세요.
전체 보고서 읽기
전체 보고서에는 세 개의 차트, 트랜잭션 해시가 포함된 유료 작업 기록, 방법 및 제한 사항이 있습니다:
https://kilawattcloud.dev/super-intelligence
Security 섹션에서 "Outside Tester Report 1: Nine Findings, Nine Changes"를 찾아보세요.
엔드포인트를 테스트하고 싶거나 저희가 잘못 파악한 부분이 있다면 알려주세요: [email protected]
Kilawatt Cloud는 Right Recruit LLC의 상표명입니다. 본 보고서는 회사가 준비한 것이며, 독립적인 보고서가 아닙니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기



