🇰🇷 한글 설명
Obot v0.23.0 미만 버전에서 인증 없이 OAuth 동적 클라이언트 등록이 가능하며 리다이렉트 URI 제한이 없는 취약점이 발견되었습니다. 공격자는 피해자가 특정 URL을 방문하게 유도하여 권한 부여 코드를 탈취할 수 있으며, 탈취한 토큰은 대상 제한 없이 모든 API 엔드포인트에서 사용될 수 있습니다.
💡 쉬운 설명
해커가 가짜 앱을 등록한 뒤 사용자가 링크를 클릭하게 만들면, 사용자의 권한을 통째로 훔칠 수 있는 보안 구멍입니다. 훔친 권한을 이용해 사용자의 데이터에 접근하거나 내용을 마음대로 수정할 수 있습니다.
🇺🇸 원문 (English)
Obot before v0.23.0 (affected versions <= v0.22.1) running with OBOT_SERVER_ENABLE_AUTHENTICATION=true exposes OAuth dynamic client registration without authentication and without any restriction on the redirect URIs a client may register. Because the authorization flow auto-completes for an already logged-in user with no consent screen, an attacker who registers a client pointing at their own domain and induces a logged-in victim to visit a single crafted authorization URL receives an authorization code at the attacker-controlled redirect URI and can exchange it for an access token and refresh token. The token minted by the MCP OAuth flow carries the victim's full group set in the JWT, and Obot validated only the issuer and not the audience, so the token is accepted as a bearer token against any Obot API endpoint the victim can access rather than being scoped to the requested MCP server, allowing the attacker to read or modify the victim's resources until the token is revoked. v0.23.0 adds a consent screen, restricts MCP OAuth tokens to the MCP involved in the request, and enforces audience validation.
📍 영향받는 시스템
Obot v0.23.0 미만 버전 (v0.22.1 이하 포함)
⚔️ 공격 벡터
인증되지 않은 OAuth 클라이언트 등록 및 리다이렉트 URI 조작을 통한 권한 부여 코드 탈취
🛡️ 대응 방법
Obot를 v0.23.0 이상의 최신 버전으로 업데이트하십시오.
🔧 검증 코드
명령어 실행 결과가 0.22.x 이하의 버전으로 출력되면 취약한 버전이 설치된 상태입니다.
python3 -c 'import obot; print(obot.__version__)' 2>/dev/null | grep -E '^0\.(2[0-2]\.|[0-1][0-9]\.)'