GHSA-XFX2-PRG5-JQ3G: Gin-Gonic 미들웨어 우회: INSATutorat에서 권한 부여 실패

발행: (2026년 3월 1일 오후 04:10 GMT+9)
4 분 소요
원문: Dev.to

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 상태 코드를 반환하는지 확인하는 통합 테스트를 구현합니다.

복구 단계

  1. 소스 코드에서 middlewares/admin.go 파일을 찾습니다.
  2. 오류 처리 분기마다 return 직전에 c.Abort()를 삽입합니다.
  3. 애플리케이션을 재빌드하고 재배포합니다.
  4. 비관리자 계정으로 /api/admin/ 엔드포인트에 접근해 수정이 적용되었는지 확인합니다.

참고 자료

0 조회
Back to Blog

관련 글

더 보기 »

일이 정신 건강 위험이 될 때

markdown !Ravi Mishrahttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fu...