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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/wvllxe/cve-2026-104356-pictshare-weak-delete-code
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityCryptographyPapers & ResearchLearning & Education
GitHubwvllxe/cve-2026-104356-pictshare-weak-delete-code

CVE-2026-104356-pictshare-weak-delete-code

PictShare < 3.7.1에서 rand()를 통한 예측 가능한 delete_code (CWE-338). PoC + 권고문 작성.

저장소 보기
251일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-104356 — PictShare의 rand()를 통한 예측 가능한 delete_code

허가된 보안 연구. 방어 및 교육 목적으로만 사용되는 PoC입니다.

CVSS 3.1 CVSS 4.0 CWE-338 Status

PictShare는 delete_code 인가 토큰을 getRandomString()으로 생성하는데, 이 함수는 모든 문자를 PHP의 비암호학적 rand()에서 가져옵니다. rand()는 CSPRNG가 아니며 — 동일한 생성기가 모든 공유 URL에 표시되는 공개 파일 해시도 생성하기 때문에 — delete_code는 비밀이 아니라 예측 가능하며, info 엔드포인트에서 코드를 읽지 않고도 호스팅된 파일을 무단으로 삭제할 수 있습니다.

CVECVE-2026-104356
제품PictShare (자체 호스팅 이미지/미디어 호스트)
영향 받는 버전>= 2.0.0, < 3.7.1
수정된 버전v3.7.1
취약점암호학적으로 취약한 PRNG 사용 (CWE-338) → 예측 가능한 인증 토큰
권한없음 (인증 불필요)
CVSS 3.15.9 MEDIUM — AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
CVSS 4.08.2 HIGH — AV:N/AC:H/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H
발견자Alisher Qarshibayev
권고문VulnCheck

근본 원인

// src/inc/core.php  (< 3.7.1)
function getRandomString($length=32, $keyspace='0123456789abcdefghijklmnopqrstuvwxyz')
{
    $str = '';
    $max = (function_exists('mb_strlen') ? mb_strlen($keyspace,'8bit') : strlen($keyspace)) - 1;
    for ($i = 0; $i < $length; ++$i) {
        $str .= $keyspace[rand(0, $max)];   // <-- rand() is NOT cryptographically secure
    }
    return $str;
}

이 하나의 함수가 둘 다 생성합니다:

  • 모든 공유 이미지 URL에 공개되는 파일 해시, 그리고
  • 삭제를 인가하는 delete_code.

두 토큰 모두 동일한 비 CSPRNG 스트림에서 나오므로, 공개 해시를 관찰한 공격자는 생성기의 상태에 대한 정보를 얻습니다 — delete_code는 32자 길이가 시사하는 엔트로피를 더 이상 갖지 않습니다. rand()는 암호학적 예측 불가능성 보장을 제공하지 않으므로, 이를 보안 토큰에 사용하는 것이 결함(CWE-338)이며, 특정 상태 복구 기법과는 무관합니다.

이것이 왜 악용 가능한지, 솔직하게 서술

  • 핵심 결함은 실제이며 벤더가 확인했습니다: 보안을 인가하는 토큰은 CSPRNG에서 나와야 합니다. 유지보수자의 수정 커밋 자체가 *"rand(), whose state can be recovered from the public file hashes drawn from the same generator"*라고 말하며 random_int()로 전환합니다.
  • 완전한 원격 상태 복구는 환경에 의존합니다. PHP 7+는 프로세스별로 rand()(Mersenne-Twister 경로로 별칭됨)를 자동 시드하므로, 즉시 사용 가능한 원격 예측기는 배포 환경(프로세스 재사용, 관찰 가능한 출력 수, PHP 빌드)에 따라 달라집니다. 따라서 이 PoC는 보편적인 단일 원격 공격을 주장하기보다는, 통제된 시드에서 예측 가능성 원리를 결정론적으로 입증합니다. 이것이 이 발견의 솔직한 범위이며 — 바로 이 때문에 벤더가 여전히 이를 취약점으로 취급하고 수정한 것입니다.

개념 증명

demo.php는 벤더의 정확한 getRandomString()을 재현하며, PRNG 상태가 알려지거나 복구되면 첫 번째 출력(공개 해시)이 두 번째 출력(delete_code)을 완전히 결정한다는 것 — 즉 해시를 관찰하면 코드를 예측할 수 있다는 것을 보여줍니다:

php demo.php

예상 출력:

[*] Reproducing PictShare getRandomString() with rand()
[*] Seed used by victim process : 1337  (unknown to attacker a priori)
    public file hash  (output #1): k3f9... (visible in the shared URL)
    secret delete_code(output #2): 8a1c...

[*] Attacker recovers seed by matching the OBSERVED public hash:
[+] Seed recovered: 1337
[+] Predicted delete_code: 8a1c...
[+] MATCH — delete_code predicted from the public hash alone (no info API needed)

demo.php를 참조하세요. 이는 자체 포함되어 있으며(서버도 네트워크도 필요 없음) rand()를 여기에 부적합하게 만드는 해시→코드 결정성을 입증합니다.

영향

  • 애플리케이션이 이미 공개적으로 노출하는 데이터로부터 인가 토큰을 예측하여 호스팅된 파일을 무단 삭제 → 가용성/무결성 손실.
  • CVE-2026-104051과 연계(또는 이를 대체): 그 버그는 코드를 직접 유출하지만, 이 버그는 코드가 애초에 추측 불가능하지 않았음을 보여줍니다.

완화 방안

PictShare 3.7.1(수정 커밋 ce5fc47)로 업그레이드하세요. 이 버전은 rand()를 random_int()(CSPRNG)로 대체합니다. 일반 지침: 모든 보안 토큰(삭제 코드, 재설정 토큰, API 키, 솔트)을 암호학적으로 안전한 RNG — PHP에서는 random_int() / random_bytes() — 로 생성하고, 절대 rand(), mt_rand() 또는 uniqid()를 사용하지 마세요.

참고: 수정 이전에 발급된 삭제 코드는 교체되지 않으므로, 수정 전 업로드물은 재업로드할 때까지 예측 가능한 상태로 남습니다.

타임라인

날짜사건
2026-10-01공개 공개, CVE 예약 및 게시 (VulnCheck), v3.7.1에서 수정

공개

벤더에 책임 있게 공개하고 VulnCheck를 통해 조율했습니다. 이 PoC가 릴리스되기 전에 수정되었습니다. 방어 및 교육 목적으로 게시됩니다.

도구 다운로드