Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
cve-2026-11837-ansible-posix-authorized-key — CVE-2026-11837: symlink 추종 chown을 통한 ansible.posix authorized_key 모듈의 로컬 권한 상승. 기술 문서; CVE-2024-9902의 자매. | Kitploit
도구/GitHubGitHub/m8seven/cve-2026-11837-ansible-posix-authorized-key
Privilege EscalationVulnerability AnalysisCode AnalysisExploitationConfiguration AuditingDevSecOps
GitHubm8seven/cve-2026-11837-ansible-posix-authorized-key

cve-2026-11837-ansible-posix-authorized-key

CVE-2026-11837: symlink 추종 chown을 통한 ansible.posix authorized_key 모듈의 로컬 권한 상승. 기술 문서; CVE-2024-9902의 자매.

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기웹사이트
183개월 전아직 검토되지 않음

CVE-2026-11837: ansible.posix authorized_key 로컬 권한 상승

사용자의 ~/.ssh 디렉터리 및 authorized_keys 파일에 대한 심볼릭 링크를 따라가는 chown(및 심볼릭 링크를 따라가는 파일 생성)을 통한 ansible.posix.authorized_key Ansible 모듈의 로컬 권한 상승입니다.

이는 제가 보고하고 Red Hat Product Security(CNA)에서 CVE-2026-11837을 할당한 취약점에 대한 분석입니다. 기술 기록으로서 여기에 게시되며, 새로운 발견을 주장하는 것이 아닙니다. 이 문제는 이전 수정 사항이 다루지 않은 모듈에서의 CVE-2024-9902의 자매입니다.

공식 참조

  • Red Hat CVE 기록: https://access.redhat.com/security/cve/CVE-2026-11837
  • Red Hat Bugzilla 결함: https://bugzilla.redhat.com/show_bug.cgi?id=2487424
  • 영향을 받는 모듈 소스: https://github.com/ansible-collections/ansible.posix/blob/main/plugins/modules/authorized_key.py

Red Hat의 게시된 인정: "Red Hat은 이 문제를 보고해 주신 Valentino Paulon에게 감사드립니다."

CVECVE-2026-11837
구성 요소ansible.posix 컬렉션, 파일 plugins/modules/authorized_key.py, 함수 keyfile()
유형권한 상승 (로컬). CWE-59 / CWE-61 (링크 따라가기) 및 CWE-282 (부적절한 소유권 관리)
CVSS7.3 (High)
공개일2026-06-10
보고자Valentino Paulon

요약

루트로 실행되는 플레이북이 ansible.posix.authorized_key를 사용하여 로컬 사용자의 키를 관리할 때, 모듈의 keyfile() 헬퍼는:

  • 사용자의 ~/.ssh 디렉터리 및 ~/.ssh/authorized_keys의 소유권을 일반 os.chown(os.lchown 아님)으로 변경하고,
  • 일반 open(..., "w")(O_NOFOLLOW 없음)으로 키 파일을 생성합니다.

기본 follow=False를 사용하면 모듈은 심볼릭 링크를 따라가서 교체하거나 거부하지 않습니다. 경로에서 직접 작동하므로 커널은 권한이 없는 대상 사용자가 자신의 ~/.ssh 내에 미리 준비한 모든 심볼릭 링크를 따라갑니다. 이로 인해 루트가 제어하는 경로의 소유권을 권한 없는 사용자에게 이전하는 두 가지 프리미티브가 생성되며, 사용자는 이를 통해 루트로 권한 상승합니다. 두 가지 모두 HEAD에서 컬렉션에 대해 종단 간 재현되었습니다.

영향을 받는 코드 및 근본 원인

keyfile() (plugins/modules/authorized_key.py), 기본 manage_dir=True, follow=False:

if manage_dir:
    if not os.path.exists(sshdir):          # os.path.exists FOLLOWS symlinks
        try:
            os.mkdir(sshdir, int('0700', 8))
        ...
    os.chown(sshdir, uid, gid)              # UNCONDITIONAL, plain chown, follows symlink
    os.chmod(sshdir, int('0700', 8))        # follows symlink

if not os.path.exists(keysfile):           # follows symlink
    ...
    f = open(keysfile, "w")                # plain open(), no O_NOFOLLOW, follows symlink
    ...
try:
    os.chown(keysfile, uid, gid)           # UNCONDITIONAL, plain chown, follows symlink
    os.chmod(keysfile, int('0600', 8))     # follows symlink
except OSError:
    pass

sshdir 및 keysfile은 대상 사용자의 passwd 홈(pwd.getpwnam(user).pw_dir)에서 파생되며, 이는 권한 없는 대상 사용자가 소유하고 제어하는 디렉터리입니다. follow 매개변수(기본값 False)는 경로에 대해 os.path.realpath()를 수행할지 여부만 선택합니다. 두 경우 모두 os.path.islink 검사, O_NOFOLLOW 열기, os.lchown 또는 기존 심볼릭 링크의 연결 해제 및 교체가 없습니다. 권한 드롭(seteuid/setfsuid)이 수행되지 않습니다. 모든 것이 루트로 실행됩니다.

두 os.chown 호출은 무조건적으로 실행되며, if not os.path.exists(...) 가드 외부에 있으므로 디렉터리/파일이 이미 존재하는지 여부에 관계없이 실행됩니다. 이것이 두 프리미티브를 신뢰할 수 있게 만듭니다.

두 가지 프리미티브

둘 다 일회용 Linux VM에서 ansible.posix HEAD로 종단 간 확인되었습니다. victim은 권한이 없는 로컬 사용자(uid 1000)입니다. 모듈은 운영자의 플레이북과 정확히 동일하게 루트로 실행됩니다. 카나리(Canaries)는 민감한 루트 대상을 대신합니다.

벡터 1: 디렉터리 심볼릭 링크 (기존 루트 소유 디렉터리의 chown)

  1. victim으로: ln -s /root/AD_CANARY ~/.ssh (/root/AD_CANARY는 기존 루트 소유 디렉터리).
  2. 운영자가 victim에 대해 authorized_key 작업을 실행합니다.
  3. 관찰: /root/AD_CANARY의 소유권이 root:root에서 victim:victim으로 변경되었습니다. os.chown(sshdir, ...) 호출이 ~/.ssh 심볼릭 링크를 따라가 루트 소유 디렉터리를 권한 없는 사용자에게 넘겼습니다.

벡터 2: 데생 파일 심볼릭 링크 (새 루트 경로 파일의 생성 + chown)

  1. victim으로 (~/.ssh가 일반 디렉터리인 경우): ln -s /root/AF_CANARY ~/.ssh/authorized_keys (대상이 존재하지 않음).
  2. 운영자가 victim에 대해 authorized_key 작업을 실행합니다.
  3. 관찰: /root/AF_CANARY가 생성되었고, 소유자는 victim:victim, 모드 0600입니다. open(keysfile, "w")가 심볼릭 링크를 통해 대상을 생성했고 os.chown(keysfile, ...)이 넘겼습니다.

두 경우 모두 권한 없는 사용자는 루트가 제어하는 경로의 소유자가 됩니다. 링크를 /etc 아래의 디렉터리(벡터 1) 또는 /etc/cron.d/나 /etc/sudoers.d/ 아래의 새 파일(벡터 2)로 지정하면 표준 후속 조치에 의해 루트를 획득하게 되며, 이제 소유자인 사용자가 대상을 다시 씁니다.

CVE-2024-9902와의 관계

이는 동일한 심볼릭 링크 따라가기 클래스를 다룬 CVE-2024-9902(ansible-core의 user 모듈 generate_ssh_key)의 자매입니다. authorized_key는 별도의 ansible.posix 컬렉션에 있으며 해당 수정 사항에 의해 변경되지 않았습니다. 심볼릭 링크를 따라가는 chown/create 패턴이 여전히 존재하고 보호되지 않았습니다. 이는 새로발견된 근본 원인이 아니라 이전 수정 사항이 도달하지 못한 모듈에서 동일한 허용된 클래스로 보고되었습니다.

영향 및 정직한 전제 조건

  • Ansible이 관리하는 호스트에서 권한 없는 로컬 사용자에서 루트로의 권한 상승.
  • 운영자가 피해자의 계정을 대상으로 하는 ansible.posix.authorized_key 작업을 실행하는 조건(이 모듈의 일반적인 사용). 로컬 사용자는 자신의 ~/.ssh에 심볼릭 링크를 미리 준비합니다. 플레이북을 실행하지 않습니다. 이는 운영자가 트리거합니다: Red Hat이 "신뢰할 수 없는 계정에 대해 실행하지 마십시오"라는 완화 조치와 함께 승인한 CVE-2024-9902와 동일한 트리거 모델입니다. 전제 조건은 자체 트리거로 평가되지 않고 명시적으로 명시됩니다.

제안된 수정

  • 심볼릭 링크를 따라가지 않고 키 파일을 독점적으로 생성합니다: os.open(keysfile, os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW, 0o600) 및 디스크립터에서 작동; sshdir 또는 keysfile이 심볼릭 링크인 경우 거부(또는 follow=False 문서 문자열 계약에 따라 연결 해제 및 교체).
  • os.chown(...)을 os.lchown으로 또는 안전하게 열린 디스크립터에서 os.fchown으로 대체하고, 마찬가지로 os.chmod 대신 os.fchmod를 사용하여 링크를 통해 소유권과 권한이 리디렉션되지 않도록 합니다.
  • 무조건적인 chown/chmod를 게이트하여 모듈 자체가 안전하게 생성한 경로에만 적용되도록 하고, 기존(심볼릭 링크 가능) 경로에는 적용되지 않도록 합니다.

공개 타임라인

날짜이벤트
2026-06-08[email protected]에 보고됨 (Red Hat Product Security CC가 CNA로), CVE-2024-9902의 자매로 구성됨
2026-06-10CVE-2026-11837 할당 및 게시됨; 크레딧 수락됨

라이선스

MIT. LICENSE 참조.

도구 다운로드