μ
μ© μ λͺ©: virtualenv μλλ°μ€ νμΆ
λ μ§: 2018-9-30
μ
μ© μμ±μ: Topsec Technologies Inc. - vr_system
λ²μ : 16.0.0
ν
μ€νΈ λμ: 칼리 리λ
μ€
CVE : μμ
1γinstall
root<strong i="11">@kali</strong>:~#pip install virtualenv
root<strong i="12">@kali</strong>:~#virtualenv test_env
root<strong i="13">@kali</strong>:~#cd test_env/
root<strong i="14">@kali</strong>:~/test_env#source ./bin/activate
(test_env) root<strong i="15">@kali</strong>:~/test_env#`
`2γSandbox escape
(test_env) root<strong i="16">@kali</strong>:~/test_env#python $(bash >&2)
root<strong i="17">@kali</strong>:~#
(test_env) root<strong i="18">@kali</strong>:~/test_env#python $(rbash >&2)
root<strong i="19">@kali</strong>:~#
CVE-2018-17793 μ΄ μ΄ λ¬Έμ μ ν λΉλμμ΅λλ€(μ κ° μμ²νμ§ μμ).
μ¬κΈ°μ 보μ μν₯μ μ€λͺ ν΄ μ£Όμκ² μ΅λκΉ? μΌλ° μλ‘ λμκ°κΈ° μν΄ bashλ₯Ό νΈμΆνλ κ²μ λμκ² μ·¨μ½μ μ²λΌ 보μ΄μ§ μμ΅λλ€. virtualenvλ₯Ό μ¬μ©νμ¬ μ λ’°ν μ μλ μ Έ λͺ λ Ήμ μμ νκ² μ€νν μ μλ€λ μΈμμ λ°μ μ¬λμ μ무λ μλ€κ³ μκ°ν©λλ€.
λλ MITREμκ² CVEλ₯Ό κ±°λΆνλλ‘ μμ²νμ΅λλ€.
λ€μκ³Ό κ°μ΄ μ μ:
(test_env) r0ot#python $(sh 1>&2)
(test_env) r0ot#
(test_env) r0ot#νμ΄μ¬
Python 2.7.15(κΈ°λ³Έκ°, 2018λ
5μ 1μΌ, 05:55:50)
linux2μ [GCC 7.3.0]
μμΈν λ΄μ©μ λ³΄λ €λ©΄ "λμλ§", "μ μκΆ", "ν¬λ λ§" λλ "λΌμ΄μΌμ€"λ₯Ό μ
λ ₯νμμμ€.
μμ OS
os.system("$(sh 1>&2)")
(test_env) r0ot#
μ μ± μ½λλ₯Ό μ€ννλ κ²½μ°:
(test_env) r0ot#python $(bash >&2)
r0ot#
POC:
(test_env) r0ot#νμ΄μ¬
Python 2.7.15(κΈ°λ³Έκ°, 2018λ 5μ 1μΌ, 05:55:50)
linux2μ [GCC 7.3.0]
μμΈν λ΄μ©μ λ³΄λ €λ©΄ "λμλ§", "μ μκΆ", "ν¬λ λ§" λλ "λΌμ΄μΌμ€"λ₯Ό μ λ ₯νμμμ€.
μμ OS
os.system("$(bash >&2)")
r0ot#
μ μ±μ½λλ₯Ό μ€ννλ κ²½μ°
μ, κ·Έλ¦¬κ³ κ±΄λ¬Όμμ λ°μ΄λ΄λ¦¬λ©΄ λ΄λ €κ°λ κΈΈμ 무μΈκ°μ λΆλͺν μ μμ΅λλ€. λΉμ μ μ΄λ―Έ μ νλΆν° μμνμ¬ ν° λ¬Έμ μ μ²ν΄ μκΈ° λλ¬Έμ λ³λ‘ μ€μνμ§ μμ΅λλ€.
μλλ°μ€μ PYTHONμ 100% μμ νμ§ μμΌλ©° μ·¨μ½μ μΌλ‘ μΈν΄ μλλ°μ€ 보νΈλ₯Ό μ°νν μ μμ΅λλ€. μλλ°μ€λ₯Ό μ¬μ©νλ μ΄μ λ 무μμ
λκΉ?
μλλ°μ€λ₯Ό μμ νκΈ° μ΄λ €μ΄ κ²½μ° μ½λμ μνμ νΌνκ³ μλλ°μ€ μ€λͺ
μ λ©μμ§λ₯Ό νμνλ κ²μ΄ μ’μ΅λλ€.
@BakedPotato999 virtualenv "sandbox"μ Pythonμ 0% μμ ν©λλ€. μ μ± μ½λλ‘λΆν° 보νΈνλλ‘ μ€κ³λμ§ μμκ±°λ μ 곡νμ§λ μμ΅λλ€. virtualenvμ λͺ©μ μ λν΄ λ§€μ° νΌλμ€λ¬μνλ κ² κ°μ΅λλ€.
@BakedPotato999 virtualenv "sandbox"μ Pythonμ 0% μμ ν©λλ€. μ μ± μ½λλ‘λΆν° 보νΈνλλ‘ μ€κ³λμ§ μμκ±°λ μ 곡νμ§λ μμ΅λλ€. virtualenvμ λͺ©μ μ λν΄ λ§€μ° νΌλμ€λ¬μνλ κ² κ°μ΅λλ€.
μ΄ Virtualenvμμ μ€νλλ μμ© νλ‘κ·Έλ¨μ λ 립μ μ΄λ©° κΈ°μ‘΄ μ΄μ 체μ μ μν₯μ λ―ΈμΉμ§ μμ κ²μ΄λΌκ³ μκ°ν©λλ€. μλλ°μ€λ₯Ό λ«μΌλ©΄ λͺ¨λ μμ μ΄ λ³΅μλ©λλ€. μλλ°μ€λ₯Ό μ¬μ©νλ©΄ μνν μ μλ νλ‘κ·Έλ¨κ³Ό μννΈμ¨μ΄λ₯Ό ν μ€νΈν μ μμ΅λλ€. λ§λμ?
μλ, μμ ν νλ Έλ€. virtualenvμ λͺ©μ μ νΉμ Python μΈν°ν리ν°μ Python ν¨ν€μ§ μΈνΈ(μμ€ν λ° userdir μ€μΉ ν¨ν€μ§ λμ )λ₯Ό μ¬μ©νμ¬ μ μμ μΈ νκ²½μμ νλ‘κ·Έλ¨μ μ€νν μ μλλ‘ νλ κ²μ λλ€.
"μλλ°μ€"λ κΈ°λ³Έμ μΌλ‘ μμ€ν
λ° μ¬μ©μ ν¨ν€μ§λ₯Ό ν¬ν¨νμ§ μκ³ virtualenvμ μ€μΉλ ν¨ν€μ§λ§ ν¬ν¨ν΄μΌ ν©λλ€. κ·Έλ¬λ κΈ°λ³Έ μμ€ν
λλ μ¬μ©μ ν¨ν€μ§λ₯Ό λ€μ κ°μ Έμ€κΈ° μν΄ sys.path
λ₯Ό λ³κ²½νλ κ²κ³Ό κ°μ΄ μ¬μ©μλ₯Ό λ§μ μ μλ κ²μ μμ΅λλ€.
λν κ·Έ μ΄λ€ κ²λ λΉμ μ΄ κ·Έ μΌμ νλ κ²μ λ°©ν΄ν΄μλ μ λ©λλ€. virtualenvμ Python μΈν°ν리ν°λ λμΌν μ¬μ©μκ° μ€νν λ μμ€ν Python μΈν°ν리ν°(μλ κ²½μ°)κ° μνν μ μλ λͺ¨λ μμ μ μνν μ μμ΄μΌ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ virtualenvμ λ§μ μΌλ°μ μ΄κ³ μμλλ μ¬μ©μ΄ μ€λ¨λ©λλ€.
@BakedPotato999 virtualenv/bin/activate
κΈ°λ³Έμ μΌλ‘ κ²½λ‘ μμ κ°μ νκ²½μ Python μ€ν νμΌμ λ£μ΅λλ€. 보μμ μν΄ λ§λ€μ΄μ§μ§ μμμ΅λλ€.
무ν¨λ‘ μ’ λ£νκ² μ΅λλ€.
μ΄λ»κ² virtualenvκ° sandbox
@BakedPotato999μΈμ§ κΆκΈν©λλ€ .
λ¬Έμ, github λ° git grep
λ₯Ό ν΅ν΄ κ²μνμΌλ©° μ μΌν sandbox
λ°μμ λ€μκ³Ό κ°μ΅λλ€.
James Gardnerλ Pylonsμ ν¨κ» virtualenvλ₯Ό μ¬μ©νλ λ°©λ²μ λν μμ΅μλ₯Ό μμ±νμ΅λλ€.
http://wiki.pylonshq.com/display/pylonscookbook/Using+a+Virtualenv+Sandbox(URLμ sandbox
μ λν λ§ν¬μ
λλ€.
그건 κ·Έλ κ³ , URLμ΄ μ£½μκ³ μ¬κΈ°μ μμ΅λλ€ https://github.com/pypa/virtualenv/blob/384c8d13490f171a7ad99eeedd7fe45021a83d87/docs/index.rst
;).
νμ¬ https://www.exploit-db.com/exploits/45528/μ "μ΅μ€νλ‘μ"μ΄ μ‘΄μ¬νκ³ μ£Όμ λ°°ν¬νμ 보μ μΆμ κΈ°κ° μ΄λ₯Ό μ·¨μ½μ±μΌλ‘ μ·¨κΈνλ€λ μ¬μ€μ΄ λ€μ μ¬λ―Έμμ΅λλ€.
κΆν μμΉμΌλ‘ μ¬μ©ν μ μμ κ² κ°μ΅λλ€. μ€μ λ‘ μ¬μ©ν΄ λ³΄κ² μ΅λλ€.
0day νμ ! :NS
λ§€μ° μ¬λ―Έμμ΅λλ€. νν κ·Έλ¦¬κ³ κ·Έ λͺ¨λ κ²μ΄μ§λ§ CVEκ°
μ΄κ²κ³Ό λ€λ₯Έ μ¬λ¬ νΈλ컀λ λμ΄νκ³ μμ΅λλ€. μ΄μ
μ€μ 보μμ μλΉν΄μΌ νλ μλΉν μκ°μ λλΉνλ μ§μ
μ¦, μ΄μ 보μμ μΌμ’
μ DoSκ° μμ΅λλ€.
νλΆ κ΅¬μ‘°. κ·Έλ¬λ μ΄μ μΉ¨λμ λν λ΄
μλ€: μ΄ "μλλ°μ€ νμΆ"
μ·¨μ½μ μ΄ μλλλ€.
@0cjs λ°©κΈ λ£¨νΈ μ‘μΈμ€ κΆνμ μ»λ λ° μ¬μ©ν μ μμμ μ¦λͺ νμ΅λλ€. μ΄λ»κ² κ·Έκ² μ·¨μ½μ μ΄ μλλκΉ?
root
μ ν λλ ν 리μλ Ruby Version Manager μ€μΉλ‘ 보μ΄λ νλͺ©μ΄ μΈκΈλμ΄ μλ€λ κ²μ΄ μ½κ° μμ¬μ€λ½μ΅λλ€. νμ§λ§ μ€μ μ΅μ€νλ‘μκ³Ό νΈνλλ€λ μ€λͺ
μ΄ μμ΅λλ€.μμ λ΄μ©μ λν κ·Έλ΄λ―ν μ€λͺ
μ€ νλλ μ€ν¬λ¦°μ·μ 곡백 λΌμΈμ sudo -s
λ° μνΈ ν둬ννΈκ° ν¬ν¨λμ΄ μλ€λ κ²μ
λλ€. λ£¨νΈ μ¬μ©μμ λν΄ λΆλΆμ μΌλ‘ μ κ±°λ RVM μ€μΉμ ν¨κ» μ΄λ μ무 κ²λ μ
μ©νμ§ μκ³ μ νν ν΄λΉ μΆλ ₯μ μμ±ν©λλ€.
@0cjs μ€μ λ‘ μλνκΈ° λλ¬Έμ λΉμ
κΈμμ, μ€κ³μ νμ¬ μ¬μ©μλ‘ μμμ νλ‘κ·Έλ¨κ³Ό μ½λλ₯Ό μ€νν μ μλλ‘ νλ λꡬλ₯Ό λ³΄κ³ νκΈ° μ μ μ‘°κΈ λ νμΈν΄μΌ ν©λλ€. μ΄κ²μ virtualenv μ·¨μ½μ μΌλ‘ λ³΄κ³ νλ κ²μ μμμ Bashλ μ¬μ©νκΈ° λλ¬Έμ Bash μ·¨μ½μ μΌλ‘ λ³΄κ³ νλ κ²λ§νΌ μλ―Έκ° μμ΅λλ€. GCC μ·¨μ½μ μ νΉμ μμ μμ μ€νν μΌλΆ μ½λλ₯Ό μ»΄νμΌνλ λ° μ¬μ©λμκΈ° λλ¬Έμ λλ€.
λ μ무 μ κ³ λ μνλλ°...?
λ£¨νΈ @kali :~/test_env#python $(bash >&2)
μμ°, λ©μ§κΈ΄ νμ§λ§ $()λ₯Ό μ¬μ©ν νμλ μμ΅λλ€... κ·Έλ₯...
root@kali :~/test_env#echo "μ΄κ²μ λνμ΄μ λλ€"
virtualenv μλλ°μ± λ©μ»€λμ¦μ "μ°ν"ν©λλ€.
@BakedPotato999 μμμ νμ΄μ¬(λλ κΈ°ν) μ½λλ₯Ό 루νΈλ‘ μ€ννλ κ²μμ 루νΈλ‘ μμμ νμ΄μ¬(λλ κΈ°ν) μ½λλ₯Ό μ€ννλ λ° μ±κ³΅νμ΅λλ€. μ μμμ νμλ‘ λμ΄κ°λ 보μ λ¬Έμ λ 무μμ΄λΌκ³ μκ°νμλκΉ?
μ, μ λ§ μ¬κ°ν λ¬Έμ μ λλ€. λ€λ₯Έ μμ μ μμ νκ² μνν μ μλ κ²½μ° ν κ°μ§ μμ μ μννλ μννΈμ¨μ΄λ₯Ό μ΄λ»κ² μ¬μ©ν μ μμ΅λκΉ? μ‘°μΈ λΆνλ립λλ€.
@ednix λΌμ΄λΈ μ€λ²νλ‘?
@ednix λΉμ μ ν μ μμ΅λλ€. μ λμ€ μ Έμ _μΌλΆ_ λͺ©μ μΌλ‘ μμ νκ² μ¬μ©ν μ μκΈ° λλ¬Έμ λ€μλ μ¬μ©ν΄μλ μ λ©λλ€.
μ¬μ€, λ€μλ μ»΄ν¨ν°λ₯Ό μ¬μ©νμ§ λ§μλ€. κ·Έκ²λ€μ μνν κ²λ€μ΄κ³ , λ€μν λͺ©μ μΌλ‘ μ¬μ©λ μ μμ΅λλ€.
μ¬μ€ μ΄ "λ¬Έμ "λ https://github.com/pypa/virtualenv/issues/1334 λ₯Ό μ²λ¦¬νλ λ° μ¬μ©ν μ μμμ μκΈ°μμΌ°μ΅λλ€. μμν μ μλ POC μ½λκ° μλ μ¬λμ΄ μμ΅λκΉ?
Nexus by Sonatypeμ pypi.orgμ λν νλ‘μλ₯Ό μ 곡ν©λλ€. νλ‘μλ₯Ό μ¬μ©νλ©΄ μ£Όμ΄μ§ μκ³κ°μ μ΄κ³Όνλ μ·¨μ½μ± μ μλ₯Ό κ°μ§ λͺ¨λ ν¨ν€μ§λ₯Ό 격리ν μ μμ΅λλ€.
μ΄ μλͺ»λ CVE virtualenvλ‘ μΈν΄ 격리λμμ΅λλ€. μ€ν΄λ‘ μΈν΄ CVEκ° μ μΆλλ©΄ μ¬μ©μμκ² μ€μ§μ μΈ μν₯μ λ―ΈμΉ λΏλ§ μλλΌ κΈ°μ¬μμ μκ°κ³Ό λ Έλ ₯μ λλΉνκ² λ©λλ€.
κ·Έκ²μ΄ λͺ λ°±νκ² μΈκΈλμ΄ μλ€λ©΄ μ£μ‘νμ§λ§ μ΄ λ¬Έμ κ° μ μκ² μ§μ μ μΈ μν₯μ λ―ΈμΉκ³ μμ΅λλ€.
MITREλ CVEλ₯Ό λΆμμΌλ‘ μ€μ νμ΅λλ€. μλ§λ Sonatypeμ΄ μ΄ μ 보λ₯Ό μ‘΄μ€νλλ‘ ν μ μμ΅λλ€.
μ¬μ€, λ€μλ μ»΄ν¨ν°λ₯Ό μ¬μ©νμ§ λ§μλ€. κ·Έκ²λ€μ μνν κ²λ€μ΄κ³ , λ€μν λͺ©μ μΌλ‘ μ¬μ©λ μ μμ΅λλ€.
μ°λ¦° μ λ μ΄λ©΄ μ λΌ, μΆμ μνν΄
κ°μ₯ μ μ©ν λκΈ
λλ MITREμκ² CVEλ₯Ό κ±°λΆνλλ‘ μμ²νμ΅λλ€.