기술 분석 · Grafana
일시 중지한 공유 대시보드의 접근 토큰을 통한 데이터 소스 설정 노출
Grafana CVE-2026-81841에서 일시 중지된 공유와 현재 데이터 소스 설정 사이의 접근 경계, 배포된 권한 검사 수정을 분석합니다.
공유를 일시 중지한 뒤에도 무엇을 볼 수 있는가
이전에 유효했던 Grafana 공유 대시보드 링크를 가진 사람은 소유자가 공유를 일시 중지한 뒤에도 현재 데이터 소스 설정을 계속 받을 수 있었습니다. 필요한 것은 링크 자체였으며, Grafana 계정이나 탈취한 계정 세션은 필요하지 않았습니다. 제가 살펴본 질문은 페이지를 준비하는 정보까지 포함해, 해당 링크로 얻을 수 있는 정보에 일시 중지 상태가 일관되게 적용되는지였습니다.
Grafana의 9월 29일 권고문은 이 권한 검사 누락을 설명하고 CVE-2026-81841의 심각도를 CVSS 3.1 기준 Medium 5.3으로 평가합니다. 로컬에서 입증한 결과는 권고문의 전체 영향 범위보다 좁습니다. 대시보드 조회와 쿼리는 거부되었지만, 참조된 데이터 소스의 현재 메타데이터는 계속 노출되었습니다.
아래 관찰은 원래 조사에서 나온 것으로, Grafana OSS 13.2.0과 InfluxDB 2.7.12, 정상적으로 작동하는 지원 대상 프록시 모드 데이터 소스를 사용한 두 차례의 통제된 로컬 실행을 포함합니다. 이 글을 위해 당시 보존한 결과와 공개된 수정을 검토했으며, 취약점을 새로 재현하거나 패치된 릴리스의 실행 검증을 수행하지는 않았습니다.
링크의 보유와 접근 권한의 유지
공유 링크는 특정 공유 상태 안에서 접근을 허용합니다. 일시 중지는 그 상태를 바꾸므로, 과거에 유효했던 토큰을 인식하는 것만으로 현재 정보의 공개를 허가할 수는 없습니다. 권한을 판단할 때는 공유가 여전히 활성화되어 있는지도 확인해야 합니다.
공개 권고문은 대시보드 일시 중지와 프런트엔드 초기화 데이터 제공 사이의 일관되지 않은 검사를 지적합니다. 대시보드 본문을 표시하지 않는 것만으로 관련 설정이 브라우저에 전달되는 것까지 막지는 못한다는 점에서 중요합니다. 일시 중지 안내 페이지를 표시하기 위한 일반 정보는 필요할 수 있지만, 그것이 현재 데이터 소스 설정을 공개할 권한까지 부여하지는 않습니다. 공급자의 설명.
따라서 조사에서는 실제로 반환된 정보에 초점을 맞췄습니다. 페이지 표시를 위해 조직을 식별하거나 성공 응답을 받았다는 사실만으로는 주장하는 기밀성 침해가 입증되지 않습니다.
현재 정보의 노출과 캐시된 페이지의 구분
원래의 두 차례 13.2.0 실행은 다음 비교 조건에서 같은 결과를 보였습니다. 아래 표는 과거 관찰을 요약한 것이며, 취약점 재현 절차가 아닙니다.
| 기록된 비교 조건 | 관찰 | 해석 |
|---|---|---|
| 활성화된 공유 | 대시보드 조회, 쿼리, 참조된 데이터 소스 메타데이터에 접근할 수 있었습니다. | 공유와 데이터 소스가 일시 중지 전에 정상적으로 작동했습니다. |
| 같은 공유를 일시 중지한 상태 | 조회와 쿼리는 거부되었지만, 참조된 메타데이터에는 계속 접근할 수 있었습니다. | 일시 중지에 따른 접근 경계가 일관되게 적용되지 않았습니다. |
| 공유에 발급된 적 없는 토큰 | 조직에 속한 데이터 소스 메타데이터가 없었습니다. | 노출된 정보는 이전에 유효했던 공유와 연결되어 있었습니다. |
| 일시 중지 이후 설정 변경 | 조회와 쿼리가 계속 거부되는 동안, 일시 중지된 공유에서 변경된 메타데이터가 보였습니다. | 일시 중지 전에 저장한 페이지가 아니라 현재 상태가 노출되었습니다. |
마지막 비교가 특히 중요했습니다. 방문자가 일시 중지 전에 이미 받은 정보를 브라우저에서 회수할 수는 없습니다. 그러나 여기서 반환된 정보에는 그 이후의 변경이 반영되어 있었습니다. 이 결과는 과거에 공개된 정보를 보관하는 것과 현재 설정에 계속 접근하는 것을 구분합니다. 발급된 적 없는 토큰을 이용한 비교도 이 결과를 일반적인 페이지 초기화 데이터와 구분했습니다.
직접 관찰한 한계와 공급자의 더 넓은 평가
지원되는 프록시 모드 평가에서 노출된 것은 데이터 소스 메타데이터였습니다. 기록은 백엔드 주소나 자격 증명 노출, 일시 중지 이후의 쿼리 접근, 쓰기 작업, 계정 탈취 또는 코드 실행을 입증하지 않습니다. 공유 삭제나 재생성 이후에도 접근이 유지된다는 근거도 아닙니다. 앞서 더 넓게 가정했던 영향은 이에 맞춰 축소했습니다.
Grafana의 공개 평가는 브라우저 접근 방식을 사용하는 데이터 소스에 저장된 자격 증명까지 포함합니다. 이는 해당 구성에 대한 공급자의 영향 평가이며, 제가 프록시 모드 실행에서 자격 증명 노출을 확인했다는 뜻은 아닙니다. Grafana는 공유 대시보드를 삭제하면 토큰이 폐기된다는 점도 명시합니다. 공개된 영향과 수명 주기 구분.
현재 공유 상태를 검사에 반영하기
Grafana는 수정 릴리스로 12.4.12, 13.0.10, 13.1.7, 13.2.3을 명시합니다. 공개된 버전 안내는 공급자 권고문과 CVE 기록에서 확인할 수 있습니다. 제 로컬 평가는 최초 영향 릴리스나 영향을 받는 모든 브랜치를 독립적으로 확정하지 않습니다.
검토한 13.2.3 릴리스에서 pkg/services/publicdashboards/internal/database/database.go의 GetOrgIdByAccessToken은 다음 조건을 포함합니다.
sql := "SELECT org_id FROM dashboard_public WHERE access_token=? AND is_enabled=true"
이 조회는 토큰이 일치하면서 공유도 활성화되어 있어야 합니다. 함께 수정된 미들웨어는 조회가 실패하거나 유효한 조직을 반환하지 않으면 조직 맥락을 설정하기 전에 처리를 멈춥니다. 위 내용은 공개된 수정의 핵심 부분입니다. 배포된 조회 조건, 배포된 조직 맥락 검사.
이번 소스 검토는 13.2.3에 반영된 권한 검사 변경을 뒷받침합니다. 패치된 릴리스에 대한 독립적인 실행 검증은 기록되어 있지 않습니다. 회귀 검증에서는 다음 결과를 확인하고자 하며, 아래 항목은 아직 실행하지 않은 제안입니다.
| 제안하는 사례 | 필요한 동작 |
|---|---|
| 활성화된 공유 | 의도된 공유 조회와 쿼리가 계속 가능해야 합니다. |
| 일시 중지된 공유 및 이후의 설정 변경 | 현재 데이터 소스 설정을 공개하지 않고, 조회와 쿼리도 계속 거부해야 합니다. |
| 존재하지 않거나 삭제된 공유 | 조직에 속한 설정을 공개하지 않아야 합니다. |
| 지원되는 프록시 및 브라우저 접근 구성 | 공개되는 설정에 현재 공유 상태를 일관되게 적용해야 합니다. |