GHSA-XFX2-PRG5-JQ3G: Gin-Gonic 미들웨어 우회: INSATutorat에서 권한 부여 실패
Source: Dev.to
개요
취약점 ID: GHSA-XFX2-PRG5-JQ3G
CVSS 점수: 8.8
공개일: 2026-03-01
Gin‑Gonic 웹 프레임워크 내 미들웨어 구현 오류로 인해 INSATutorat 애플리케이션에 심각한 권한 우회 취약점이 존재합니다. 관리 라우트를 보호하도록 설계된 AdminHandler 미들웨어가 인증되지 않은 접근을 감지했을 때 요청 라이프사이클을 종료하지 못합니다. 그 결과, 인증된 비관리자 사용자가 /api/admin/* 아래 엔드포인트에 대한 보안 제어를 우회하여 특권 작업을 실행할 수 있어 데이터 손실 및 무단 시스템 관리가 발생할 수 있습니다.
TL;DR
INSATutorat 애플리케이션의 관리 미들웨어에 치명적인 결함이 있습니다. 코드가 비인가 사용자를 올바르게 식별하지만, 요청 처리 체인을 중단하지 않아(c.Abort() 누락) 인증된 모든 사용자가 권한과 관계없이 관리 API 엔드포인트를 호출할 수 있습니다.
익스플로잇 상태
POC
기술 세부 정보
- CWE ID: CWE-285
- CVSS v3.1: 8.8
- 공격 벡터: 네트워크
- 필요 권한: 낮음
- 영향: 높음 (기밀성 및 무결성)
- 플랫폼: Go (Gin‑Gonic)
영향을 받는 시스템
- INSATutorat (Go 애플리케이션) – 커밋
15ae47425aed337181f7a6c54a9d199c93b041eb에서 수정됨
코드 분석
커밋: 15ae474
c.Abort()를 추가하여 관리 미들웨어 권한 우회를 수정:
func AdminHandler() gin.HandlerFunc {
return func(c *gin.Context) {
userInterface, exists := c.Get("user")
if !exists {
_ = c.Error(apierrors.Unauthorized)
c.Abort()
return
}
user := userInterface.(*models.User)
if !user.IsAdmin {
_ = c.Error(apierrors.Forbidden)
c.Abort()
return
}
// Continue processing for authorized admin users
c.Next()
}
}
완화 전략
- 미들웨어 로직을 즉시 패치합니다.
Abort()호출이 누락된 Gin 미들웨어 전체를 감사합니다.- 비인가 요청에 대해 올바른 HTTP 상태 코드를 반환하는지 확인하는 통합 테스트를 구현합니다.
복구 단계
- 소스 코드에서
middlewares/admin.go파일을 찾습니다. - 오류 처리 분기마다
return직전에c.Abort()를 삽입합니다. - 애플리케이션을 재빌드하고 재배포합니다.
- 비관리자 계정으로
/api/admin/엔드포인트에 접근해 수정이 적용되었는지 확인합니다.