박연오

기술 분석 · authentik

위임된 그룹·사용자 관리를 통한 권한 상승

authentik CVE-2026-94609의 위임 관리, 그룹 권한 상속, 공급자가 수정한 권한 검사 경계를 분석합니다.

위임된 관리 권한에도 범위가 있어야 한다

authentik은 관리자가 개별 사용자나 그룹의 관리를 다른 계정에 위임할 수 있도록 합니다. 제가 살펴본 질문은 그룹 상속으로 사용자에게 부여되는 권한이 달라질 때도 위임의 범위가 지켜지는지였습니다. 평가에 사용한 계정은 제한된 사용자 관리 권한으로 시작했지만, 그 범위를 넘어 실제로 적용되는 슈퍼유저 권한을 얻을 수 있었습니다. 처음부터 모든 관리자 권한을 가진 계정은 아니었습니다.

이 구분은 authentik 자체의 접근 제어 모델에 명시되어 있습니다. 객체 권한은 특정 객체의 관리를 허용하고, 전역 권한은 해당 유형의 객체 전체에 적용됩니다. 따라서 한 사용자를 수정할 수 있다는 사실만으로 그 사용자에게 가능한 모든 권한을 부여할 수 있는 것은 아닙니다. 권한 모델.

원래 조사에서는 authentik 2026.5.6의 소스 검토와 통제된 로컬 검증을 기록했습니다. 조사 대상은 위임된 사용자 관리 과정에서 상속되는 권한으로, 이후 여러 사례를 통합한 권고문의 일부에 해당합니다. 아래 실행 관찰은 당시 조사에서 나온 결과입니다. 배포된 코드의 비교는 이후에 수행한 소스 검토이며, 이 글을 작성하면서 취약점을 새로 재현하거나 패치된 릴리스의 실행 검증을 수행하지는 않았습니다.

직접 설정된 권한과 실효 권한

그룹 자체의 설정은 그 그룹이 부여하는 권한의 일부만 설명합니다. authentik은 하위 그룹의 구성원을 상위 그룹의 구성원으로도 취급합니다. 여기서 ‘실효 권한’은 더 위쪽의 상위 그룹에서 상속되는 권한까지 포함해, 이러한 관계를 해석한 뒤 시스템이 실제로 인정하는 권한을 뜻합니다. 이 계층 구조는 의도된 기능입니다. 그룹 계층 구조.

평가한 2026.5.6 모델에서 User.all_groups()는 상위 그룹을 포함하고, User.is_superuser는 이렇게 확장된 그룹 집합에서 슈퍼유저 여부를 확인합니다. 따라서 그룹 필드와 사용자에게 최종 적용되는 권한은 서로 다른 질문에 답합니다. 전자는 단일 그룹을 설명하고, 후자는 계층 구조까지 포함합니다. 평가한 그룹 소속 계산, 실효 슈퍼유저 권한 계산.

세 가지 판단이 일관되어야 합니다. 객체에 대한 권한 검사는 호출자가 어떤 사용자나 그룹을 관리할 수 있는지 결정합니다. 권한 부여에 대한 검사는 호출자가 변경 결과로 생기는 권한을 부여해도 되는지 결정합니다. 그룹 소속의 해석은 저장된 관계에 따라 어떤 권한이 실제로 적용되는지 결정합니다. 첫 번째 검사를 통과해도 두 번째 질문이 해결되지는 않으며, 두 번째 검사는 세 번째 단계와 동일하게 상속을 해석해야 합니다.

공개 권고문은 슈퍼유저 여부를 확인하지 않거나 그룹 자체의 설정만 고려한 검사를 설명합니다. 기존 역할을 그룹에 할당할 때 필요한 권한 검사가 누락된 사례도 다룹니다. 제 기여는 상속된 권한에 초점을 맞췄으며, 통합 권고문에는 이번 평가 범위를 벗어나는 추가 사례도 포함되어 있습니다.

정상적인 관리 작업과 권한 상승의 구분

관리 작업이 성공했다는 사실만으로는 취약점이 입증되지 않습니다. 핵심은 계정이 처음 가졌던 권한과 변경 이후의 실효 권한을 비교하는 것이었습니다. 원래의 로컬 평가에서는 시작 시점의 권한 범위와 함께, 추가 권한이 부여되지 않는 비교 조건도 기록했습니다.

기록된 비교 조건 권한 검사 경계에서의 관찰 해석
시작 시점의 계정 제한된 관리 권한만 위임받았으며, 슈퍼유저 권한을 부여할 권한은 없었습니다. 상승한 권한은 처음 위임받은 범위에 포함되지 않았습니다.
추가 권한을 부여하지 않는 그룹 관계 허용된 관계가 슈퍼유저 권한을 부여하지 않았습니다. 위임된 수정 작업의 성공만으로 권한 상승이 입증되지는 않았습니다.
문제가 발생한 권한 상속 사례 변경 이후의 실효 권한이 시작 시점의 범위를 넘어섰습니다. 상속 해석의 불일치는 수정 허용을 넘어 실제 보안 영향을 일으켰습니다.

이 관찰은 계정이 이미 해당 권한을 가지고 있었던 경우와 이번 문제를 구분합니다. 또한 성공 응답과 실제 권한의 변화도 구분합니다. 표는 원래 검증의 비교 조건을 요약한 것이며, 패치된 릴리스의 결과가 아닙니다.

상속이 설계대로 정확하게 작동했을 가능성도 검토했습니다. 이는 권한 검사 실패와 양립할 수 있습니다. 상속은 관계가 어떤 권한을 부여하는지 결정하고, 권한 검사는 누가 그 관계를 설정할 수 있는지 결정하기 때문입니다. authentik은 관리 권한과 슈퍼유저 상태를 활성화할 권한을 명시적으로 분리하므로, 제품 자체의 경계를 기준으로 이 문제를 분석할 수 있습니다. 그룹 관리에 필요한 권한.

공개된 취약점의 범위

공급자는 모든 관리자 권한을 갖지 않은 계정에 그룹, 그룹 소속 또는 사용자 관리를 위임한 배포 환경으로 영향 범위를 한정합니다. 권고문은 통합된 취약점의 심각도를 CVSS 3.1 기준 High 8.8로 평가합니다. 공급자의 평가.

제가 조사한 권한 상속 사례는 관련 그룹 관계가 존재해야 성립합니다. 이 조사는 그러한 구성이 얼마나 흔한지 밝히지 않습니다. 입증된 경계는 authentik의 관리 모델 내부에 있으며, 이 글은 연결된 애플리케이션의 침해나 통합 권고문의 모든 사례를 제 평가에서 재현했다고 주장하지 않습니다.

변경으로 부여되는 권한 전체를 검사하기

공급자는 2026.2.7, 2026.5.7, 2026.8.2를 패치된 버전으로 명시하고, 업그레이드 전까지 관련 관리 권한을 모든 관리자 권한을 가진 계정에만 부여하도록 권고합니다. 공급자의 조치 안내.

검토한 2026.5.7 릴리스에서 UserSerializer.validate_groups는 먼저 새로 추가되는 그룹과 기존 그룹 소속을 구분합니다. authentik/core/api/users.py의 핵심 검사는 다음과 같습니다.

ancestry = new_groups.with_ancestors()
if ancestry.filter(is_superuser=True).exists() and not request.user.has_perm(
    "authentik_core.enable_group_superuser"
):
    raise ValidationError(
        _("User does not have permission to add members to a superuser group.")
    )

이 검사는 권한 부여를 허용하기 전에 상속된 권한을 평가합니다. 기존 그룹 소속을 제외해 새로 부여되는 권한에 검증을 집중합니다. 객체에 대한 권한 검사도 별도로 필요합니다. 호출자에게는 대상 사용자를 관리할 권한도 있어야 합니다. 배포된 검증 로직과 주변 코드.

위 코드는 공급자의 수정 중 핵심 부분을 발췌한 것입니다. 2026.5.7 릴리스에는 공개된 업스트림 변경이 포함되어 있습니다. 이번 검토는 2026.5.7의 해당 소스 변경을 확인한 것이며, 패치된 릴리스에 대한 독립적인 실행 검증은 기록되어 있지 않습니다.

회귀 검증에서는 다음 결과를 확인해야 합니다. 아래 항목은 아직 실행하지 않은 제안이며, 업스트림 테스트의 검증 범위를 설명하는 것이 아닙니다.

제안하는 사례 필요한 동작
추가 권한을 부여하지 않는 허가된 수정 정당한 위임 관리가 계속 가능해야 합니다.
부여 권한 없이 슈퍼유저 권한을 직접 또는 상속을 통해 새로 부여 변경을 거부하고 기존 그룹 소속과 권한을 유지해야 합니다.
객체 관리 권한과 권한 부여 권한을 모두 가진 계정의 동일한 작업 의도된 관리 작업을 허용해야 합니다.
권한 부여 권한은 있지만 대상의 관리 권한은 없는 경우 객체 변경을 계속 거부해야 합니다.

평가 대상과 수정된 소스의 두 스냅샷만으로 최초 영향 릴리스를 특정하거나 모든 유지보수 브랜치를 독립적으로 검증할 수는 없습니다. 남은 실행 검증은 배포된 검증 로직이 두 권한 경계를 모두 지키면서, 거부 이후에도 보호 대상의 상태를 변경하지 않는지 확인하는 것입니다.