## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-NAHUELDSANCHEZ-BLOGPOST_CVE-2018-19987-ANALYSIS
# CVE-2018-19987 (D-Link OS ๋ช
๋ น ์ฃผ์
) ๋ถ์ 

์๋
ํ์ธ์!
์ด ์งง์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์๋ CVE-2018-19987์ ์ธ๋ถ ์ฌํญ์ ๋ ์ ์ดํดํ๊ธฐ ์ํด ์ํํ ๊ฐ๋จํ ๋ถ์์ ์ค๋ช
ํ๊ฒ ์ต๋๋ค. ์ฒ์์๋ ์ด CVE์ ๋ํ ๊ณต๊ฐ ์ ๋ณด๋ ์ต์คํ๋ก์์ด ์๋ค๊ณ ์๊ฐํด์ ์ด CVE๋ฅผ ์ถ์ ํ๊ธฐ ์์ํ์ต๋๋ค. ์ฒซ ๋ฒ์งธ ๋ถ์์ ์ํํ ์งํ, ์ฌ๊ธฐ์ ์ฌ๊ธฐ์์ ์ฐพ์ ์ ์๋ ๋ ๊ฐ์ ๊ณต๊ฐ PoC๋ฅผ GitHub์์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ด๋ฏธ ๋๋ถ๋ถ์ ์์
์ ์ํํ๊ณ ์์ ํ ๋ถ์์ ์ฐพ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์ ์ด์จ๋ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์์ฑํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ฌ๋ฏธ์๊ฒ ์ฝ์ผ์๊ธธ ๋ฐ๋๋๋ค!
_์
๋ฐ์ดํธ:_ ์.. ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์์ฑํ๋ ๋์ ๋งํ์ ๊ตฌ๊ธ๋ง์ ํ๋ค๊ฐ D-Link DIR-818์์ ๋งค์ฐ ์ ์ฌํ ์ทจ์ฝ์ (CVE-2018-19986)์ ์ค๋ช
ํ๋ ๋ค์ ๊ธฐ์ฌ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ๋ผ์ฐํฐ ์ทจ์ฝ์ ๋ถ์ ์๋ฆฌ์ฆ (5): CVE-2018-19986 DIR-818LW&828 ๋ช
๋ น ์ฃผ์
์ทจ์ฝ์ ๋ถ์ ๋ฐ ์ฌํ (Google ๋ฒ์ญ) Ogur1 ์์ฑ.
# CVE-2018-19987 ๋ถ์
๊ธฐ๊ธฐ์ ๋ํด ์์งํ ์ ์๋ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ชจ์ผ๋ฉด์ ๋ถ์์ ์์ํ์ต๋๋ค:
* ์ ํ๋ช
: D-Link DIR-822-US
* ์ ํ ํ์ด์ง: https://us.dlink.com/en/products/dir-822-d-link-wifi-router-ac1200-dual-band
* ์ง์ ํ์ด์ง: https://support.dlink.com/ProductInfo.aspx?m=DIR-822-US
* ๋ชจ๋ธ: DIR-822 ๋ฆฌ๋น์ C (๋ค๋ฅธ ๊ธฐ๊ธฐ๋ ์ํฅ์ ๋ฐ์)
* ์ํฅ์ ๋ฐ๋ ํ์จ์ด ๋ฒ์ : FW v3.01B02
* ์ํฅ์ ๋ฐ๋ ํ์จ์ด ํ์ผ๋ช
: DIR822C1_FW301WWb02.bin (md5sum: 1bff7ec8b4da0643f65b4d44c630e92b)
* ์์ ๋ ํ์จ์ด ๋ฒ์ : FW v3.13
* ์์ ๋ ํ์จ์ด ํ์ผ๋ช
: DIR822C1_FW313WWb01.bin (md5sum: aa16c7016f67be384e0784e439ce26d2)
* ํ์จ์ด ์์นด์ด๋ธ ํ์ด์ง: ftp://ftp2.dlink.com/PRODUCTS/DIR-822-US/REVC/
## ๊ทผ๋ณธ ์์ธ ๋ถ์
> _์ฐธ๊ณ : ๋ชจ๋ ๋ถ์์ ํ์จ์ด v3.01B02๋ก ์ํํ์ต๋๋ค._
Mitre์ ํ์ด์ง์์ ํ์ธํ ์ ์๋ ์ด ์ทจ์ฝ์ ์ ๋ํ ๊ณต๊ฐ ์ ๋ณด๋ ์์ํ๊ธฐ์ ์ถฉ๋ถํ ์ ๋ณด๋ฅผ ์ ๊ณตํ์ต๋๋ค:
root@kitploit:~
D-Link DIR-822 Rev.B 202KRb06, DIR-822 Rev.C 3.10B06, DIR-860L Rev.B 2.03.B03, DIR-868L Rev.B 2.05B02, DIR-880L Rev.A 1.20B01_01_i3se_BETA, and DIR-890L Rev.A 1.21B02_BETA devices mishandle IsAccessPoint in /HNAP1/SetAccessPointMode. In the SetAccessPointMode.php source code, the IsAccessPoint parameter is saved in the ShellPath script file without any regex checking. After the script file is executed, the command injection occurs. A vulnerable /HNAP1/SetAccessPointMode XML message could have shell metacharacters in the IsAccessPoint element such as the `telnetd` string.
๋ถ์์ ์์ํ๋ ค๋ฉด ์ดํด๋ณผ ๋ฌด์ธ๊ฐ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๋ผ์ฐํฐ์ ํ์ผ ์์คํ
(FS)์ ์ถ์ถํ์ต๋๋ค.
root@kitploit:~
binwalk -eM DIR822C1_FW301WWb02.bin
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 DLOB firmware header, boot partition: "dev=/dev/mtdblock/1"
10380 0x288C LZMA compressed data, properties: 0x5D, dictionary size: 8388608 bytes, uncompressed size: 4213444 bytes
1376372 0x150074 PackImg section delimiter tag, little endian size: 10505216 bytes; big endian size: 5021696 bytes
1376404 0x150094 Squashfs filesystem, little endian, version 4.0, compression:lzma, size: 5019773 bytes, 2282 inodes, blocksize: 131072 bytes, created: 2016-03-18 09:35:31
๋ณด์๋ค์ํผ Binwalk๋ Linux ํ์ผ ์์คํ
์ ๊ฐ์งํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ฐ์ง ์ ๋ณด๋ฅผ ๋ ์์ธํ ์ดํด๋ณด๋ฉด ๊ถ๊ณ ์์ `/HNAP1` ๊ฒฝ๋ก๋ฅผ ์ธ๊ธํ๊ณ ์์์ ์ ์ ์์ต๋๋ค. ๊ทธ๋ผ ๋ผ์ฐํฐ๊ฐ ์ด๋ฌํ URL์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ์ดํด๋ณด๊ธฐ ์์ํ ์ ์์ต๋๋ค.
### HNAP1 ์์ฒญ ์ฒ๋ฆฌ
ํ๋ฅญํ /dev/tty0 ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์์ ์ค๋ช
ํ ๋ฐ์ ๊ฐ์ด, ์ด๋ฌํ URL์ ๊ถ๊ทน์ ์ผ๋ก `htdocs/cgibin`์ ์์นํ `cgibin`์ด๋ผ๋ ๋ฐ์ด๋๋ฆฌ์ ์ํด ์ฒ๋ฆฌ๋ฉ๋๋ค. ํ์ง๋ง ์ ๋ ์ด๊ฒ์ด ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์๋์ง ๋ ์ ์ดํดํ๊ณ ์ถ์๊ณ , ๊ฒฐ๊ตญ HTTP ์๋ฒ๊ฐ ์์ฒญ์ ์ฒ๋ฆฌํ๋๋ก ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์๋์ง ์ดํดํด์ผ ํ์ต๋๋ค. HTTP ์๋ฒ๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉ๋๋ค๊ณ ๊ฐ์ ํ๊ณ `httpd.conf` ํ์ผ์ ์ฐพ์๋ณด์๊ณ , `/etc/services/` ํด๋ ์๋์์ `HTTP.php`๋ผ๋ ํ์ผ์ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ด ํ์ผ์๋ ๋ฌด์๋ณด๋ค๋ ๋ค์๊ณผ ๊ฐ์ ํฅ๋ฏธ๋ก์ด ์ค์ด ํฌํจ๋์ด ์์ต๋๋ค:
root@kitploit:~
$httpd_conf = "/var/run/httpd.conf";
fwrite("a",$START, "xmldbc -P /etc/services/HTTP/httpcfg.php > ".$httpd_conf."\n");
fwrite("a",$START, "event PREFWUPDATE add /etc/scripts/prefwupdate.sh\n");
fwrite("a",$START, "httpd -f ".$httpd_conf."\n");
fwrite("a",$START, "event HTTP.UP\n");
fwrite("a",$START, "exit 0\n");
์ด ํ์ผ์ด ํน์ ์์ ์ ์คํ๋์ด `/var/run/httpd.conf` ํ์ผ์ ์์ฑํ๋ค๊ณ ๊ฐ์ ํ์ต๋๋ค. ์น ์๋ฒ๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋์๋์ง ์์๋ณด๊ธฐ ์ํด `/etc/services/HTTP/httpcfg.php` ํ์ผ์ ๋ถ์ํ์ต๋๋ค (๊ด๋ จ ๋ถ๋ถ๋ง ํฌํจํ์ต๋๋ค):
root@kitploit:~
if ($hnap > 0)
{
echo
" Control". "\n".
" {". "\n".
" Alias /HNAP1". "\n".
" Location /htdocs/HNAP1". "\n".
" External". "\n".
" {". "\n".
" /usr/sbin/hnap { hnap }". "\n".
" }". "\n".
" IndexNames { index.hnap }". "\n".
" }". "\n";
}
์ด์ ๋ชจ๋ ์กฐ๊ฐ์ด ๋ชจ์์ต๋๋ค! ์น ์๋ฒ๊ฐ `/usr/sbin/hnap`์ ์ฌ์ฉํ์ฌ `/HNAP1`์ ๋ํ HTTP ์์ฒญ์ ์ฒ๋ฆฌํ๋๋ก ๊ตฌ์ฑ๋์ด ์๋ค๊ณ ๊ฐ์ ํ ์ ์์ผ๋ฉฐ, _/dev/tty0_ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ๊ธฐ๋ฐ์ผ๋ก ์ด๊ฒ์ด `htdocs/cgibin` ๋ฐ์ด๋๋ฆฌ์ ๋ํ ๋งํฌ๋ผ๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค.
๋ค์ ๋จ๊ณ๋ `cgibin` ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ดํด๋ณด๊ณ HNAP ์์ฒญ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ์ดํดํ๋ ๊ฒ์ด์์ต๋๋ค. ๋ค์ ์ด๋ฏธ์ง์์ ๋์ปดํ์ผ๋ `main` ํจ์์ ์ผ๋ถ๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์ ๋ฌ๋ URL ๊ฒฝ๋ก๋ `hnap`์ด ๋ฐ๊ฒฌ๋๊ณ `hnap_main` ํจ์๊ฐ ํธ์ถ๋ ๋๊น์ง ๋ค์ํ ๊ฒฝ๋ก(์: session.cgi, authentication.cgi, captcha.cgi ๋ฑ)์ ๋น๊ต๋ฉ๋๋ค.
> _์ฐธ๊ณ : main ํจ์๋ฅผ ๋ถ์ํ๋ ๋์ hnap ๋ฌธ์์ด์ ์๋ณํ๋ ๋ฐ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์์ต๋๋ค. Ghidra๊ฐ ์ด๊ธฐ ๋ถ์ ์ค์ ์ด๋ฅผ ๋ฌธ์์ด๋ก ๊ฐ์งํ์ง ๋ชปํ๊ธฐ ๋๋ฌธ์
๋๋ค._
๋ค์ ๋จ๊ณ๋ ์ด ํจ์๊ฐ ๋ฌด์์ ํ๋์ง ์ดํดํ๋ ๊ฒ์ด์์ต๋๋ค. ํจ์๊ฐ ๋ฌด์์ ํ๋์ง ๋ ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋๋ ๊ด๋ จ ๋ถ๋ถ์ ์ฝ๋ ์ค๋ํซ๋ง ์ ๊ณตํ๊ฒ ์ต๋๋ค. ๋ํ ์ผ๋ถ ๊ด๋ จ ๋ถ๋ถ์ ์์ฌ ์ฝ๋๋ก ์์ฑํ๊ฒ ์ต๋๋ค โ ๋ชฉ์ ์ ๋ช
ํํ ํ๊ธฐ ์ํด ์ผ๋ถ ๋ณ์ ์ด๋ฆ์ ๋ณ๊ฒฝํ์ต๋๋ค.
root@kitploit:~
...
HTTP_SOAPACTION = getenv("HTTP_SOAPACTION");
REQUEST_METHOD = getenv("REQUEST_METHOD");
HNAP_AUTH = getenv("HTTP_HNAP_AUTH");
__haystack = getenv("HTTP_COOKIE");
pcVar1 = getenv("HTTP_REFERER");
...
if (HTTP_SOAPACTION != "") {
if (HTTP_SOAPACTION == GetDeviceSettings) {
...
} else {
// These actions will occur during auth. Process
if ("GetCAPTCHAsetting" in HTTP_SOAPACTION) {
sess_generate_captcha();
} else {
if ("Login" in HTTP_SOAPACTION) {
perform_login();
}
// We'll land here once auth.
if (HNAP_AUTH != "") {
if ("uid=" in HTTP_COOKIE){
is_valid_auth = perform_auth_process()
if (is_valid_auth) {
if("logout" in HTTP_SOAPACTION){
perform_logout();
// If we are auth. and NOT trying to logout
// the code will try to perform the action
// we requested
} else {
// If we arrive here we win
// interesting code below
goto LAB_004141d4;
}
}
}
}
// If we are not authenticated we can't do anything
Return "You need proper authorization to use this resource"
}
}
} else {
...
}
LAB_004141d4:
hnap_action = get_hnap_operation(HTTP_SOAPACTION);
if (HTTP_SOAPACTION != "") {
hnap_action_len = strlen(hnap_action);
}
snprintf(path_to_hnap_php_file,0x100,"%s/%s.php","/etc/templates/hnap/",hnap_action);
if (!check_file_access(path_to_hnap_php_file)){
return "HNAP ACTION DOES NOT EXIST (FAIL)"
}
if (REQUEST_METHOD == "POST") {
// Here arguments for the PHP are extracted
parse_request_and_extract_xml()
if (hnap_action == "GetFirmwareStatus") {
system("sh /etc/events/checkfw.sh > /dev/console");
}
// Here the final arguments for the xmldbc_ephp are crafted
snprintf(ARGS_FOR_XMLDBC_PHP,0x100,"%s%s.php\nShellPath=%s%s.sh\nPrivateKey=%s\n",
"/etc/templates/hnap/", hnap_action, &ShellPath, hnap_action, &PRIVATE_KEY);
// PHP is executed (in our case SetAccessPointMode.php) and the shell
// script is written to ShellPath
xmldbc_ephp(0,0,ARGS_FOR_XMLDBC_PHP,stdout);
snprintf(hnap_action, 0x100, "%s", hnap_action);
// Shell command is built to run the previously written shell file
// (File written by the PHP script)
shell_command = "sh %s%s.sh > /dev/console &";
}
snprintf(cmd_to_execute, 0x100, shell_command, &PATH, hnap_action);
// File is executed containing the command injection
system(cmd_to_execute);
}
...
์ด ํจ์์ ๋ํ ๋ถ์์ด ์๋ฃ๋ ํ, `SetAccessPointMode.php` PHP ํ์ผ์ ์ดํด๋ณด๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค โ ๊ฒฐ๊ตญ ๊ฒฐํจ์ ํฌํจํ๊ณ ์๋ ํ์ผ์
๋๋ค โ ๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์กฐ๊ฐ์ ๋ง์ถฐ๋ณด๋ ค๊ณ ํ์ต๋๋ค:
root@kitploit:~
...
$IsAccessPoint = query("/runtime/hnap/SetAccessPointMode/IsAccessPoint");
...
fwrite("w",$ShellPath, "#!/bin/sh\n");
fwrite("a",$ShellPath, "echo [$0] $1 ... > /dev/console\n");
fwrite("a",$ShellPath, "echo IsAccessPoint = ".$IsAccessPoint." > /dev/console\n");
fwrite("a",$ShellPath, "echo Result = ".$Result."\n");
...
๋ณด์๋ค์ํผ, `hnap_main` ํจ์์ ์ํด ์ฑ์์ง๋ `$ShellPath` ๋ณ์์ ์ฌ์ฉ์๊ฐ ์ ์ดํ๊ณ ์ ์ก๋ XML ์์ฒญ์ ์ ๋ฌ๋๋ `$IsAccessPoint` ๋ณ์๊ฐ ์์ต๋๋ค. ์ด๋ฅผ ํตํด PHP ํ์ผ์ ์ํด ์์ฑ๋ ๋ณ์์์ OS ๋ช
๋ น ์ฃผ์
์ด ์ด๋ป๊ฒ ์คํ๋๋์ง ํ์ธํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์์ ์ด ๋ฌธ์ ๋ฅผ ์ต์คํ๋ก์ํ๊ธฐ ์ํด pr0v3rbs๊ฐ ๊ฐ๋ฐํ ์ ์ฒด PoC๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
์ํฅ์ ๋ฐ๋ ๋ฒ์ ๊ณผ ์์ ๋ ๋ฒ์ ์ ๋ํด์๋ ๋์ค์ ์กฐ๊ธ ๋ ๋
ผ์ํ๊ฒ ์ต๋๋ค. ์๋ ํ์์ ๋ณผ ์ ์๋ฏ์ด, ํจ์น์ ์ผ์ข
์ ํ๊ท(regression)๊ฐ ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๋ก ์ธํด ์ด๋ฏธ ํจ์น๋์์ด์ผ ํ ๋ฒ์ ์์ ์ด ์ทจ์ฝ์ ์ด ๋ค์ ๋์
๋์์ต๋๋ค.
## ๋ถ์๋ ํ์จ์ด ๋ฒ์
ํ์จ์ด| ๋ฒ์ | MD5 ํด์| ์ถ์ ๋ ์ง| ์ทจ์ฝ ์ฌ๋ถ
---|---|---|---|---
DIR822C1_FW315WWb02.bin| 3.15B02 WW| 7121771c3e1706ba76fbf244023efad3| 06/11/2019| ์๋์
DIR822C1_FW313WWb01.bin| FW v3.13| aa16c7016f67be384e0784e439ce26d2| 10/07/2019| ์๋์
DIR822C1_FW303WWb04_i4sa_middle.bin| FW v3.12B04| c3b9a3f115c02e739690616aba2f2d99| 26/04/2019| ์
DIR822C1_FW312WWb04.bin| FW v3.12B04| eb11afbd136a5b29cea18141f727bfa8| 26/04/2019| ์ (*)
DIR822C1_FW311WWb01.bin| FW v3.11| 6d7c90eaaae835667faea65c862b3c82| 01/01/2019| ์
DIR822C1_FW311bWWb01_icjg.bin| 3.11B01_icjg_WW| 75e361e1465604aeda5d5dbcaecca977| 21/12/2018| ์๋์
DIR822C1_FW303WWb04_i4sa_middle.bin| FW v3.10B06| c3b9a3f115c02e739690616aba2f2d99| 17/08/2018| ์
DIR822C1_FW310WWb06.bin| FW v3.10B06| e33db75d0801fddb1c90308982e69fe5| 17/08/2018| ์ (*)
DIR-822_C1_FW302WWb05.bin| FW v3.02| 0dbf840c0ff5d3a5b593d33690e15d82| 14/09/2017| ์
DIR822C1_FW301WWb02.bin| FW v3.01B02| 1bff7ec8b4da0643f65b4d44c630e92b| 27/04/2016| ์
_(*) ์ํธํ๋์ง ์์ ํด๋น ํ์จ์ด ๋ฒ์ ์ด ์ทจ์ฝํ๊ธฐ ๋๋ฌธ์ ์ด ํ์จ์ด ๋ฒ์ ๋ค์ ํ์ธํ์ง ์์์ต๋๋ค._
์ ํ์์ ๋ณผ ์ ์๋ฏ์ด, ์ทจ์ฝ์ ์ ์ํฅ์ ๋ฐ๋ PHP ํ์ผ `SetAccessPointMode.php`๋ฅผ ์ ๊ฑฐํจ์ผ๋ก์จ _์ผ๋ถ_ ํ์จ์ด ๋ฒ์ ์์ ์์ ๋์์ต๋๋ค. ํ์ผ์ด ์กด์ฌํ์ง ์์ผ๋ฉด ํจ์์์ ์ํ๋๋ ๊ฒ์ฌ๊ฐ ์คํจํ๊ณ ์๋ฌด๊ฒ๋ ์คํ๋์ง ์์ต๋๋ค. ํ์จ์ด ๋ฒ์ `FW v3.131` ๋ฐ `3.15B02 WW`์์ `hnap_function`์ ๋ถ์ํ์ฌ ์ด๋ฅผ ํ์ธํ์ต๋๋ค. `hnap_main`์ ์ฝ๋๋ ์ด ๋ฌธ์ ์ ๊ด๋ จํ์ฌ ๋ณ๊ฒฝ๋์ง ์์์ง๋ง PHP ํ์ผ์ ๋ ์ด์ ์กด์ฌํ์ง ์์์ต๋๋ค.
๋ ํฅ๋ฏธ๋ก์ด ์ ์ ์ด ๋ฒ๊ทธ๊ฐ ๋ฒ์ `3.11B01_icjg_WW`์์ ํจ์น๋ ํ, ์ด๋ป๊ฒ๋ ํ์จ์ด ๋ฒ์ `FW v3.11`๋ถํฐ `FW v3.12B04`๊น์ง ๋ค์ ๋์
๋์๋ค๋ ๊ฒ์
๋๋ค.
# ๊ฒฐ๋ก ๋ฐ ๋ค์ ๋จ๊ณ
์ฒซ ๋ฒ์งธ ๊ฒฐ๋ก ์ผ๋ก, ์ด๋ฌํ ๊ธฐ๊ธฐ๋ฅผ ์ง์ ํ ๋ณด์ ์ฅ์น๋ก ์ ๋ ์ ๋ขฐํ์ง ๋ง์์ผ ํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค โ ์
๋ฐ์ดํธ์์ ์ผ์ด๋ ์ผ์ ์ ๊ทธ๋ ๊ฒ ํด์๋ ์ ๋๋์ง์ ๋ํ ๋ช
ํํ ์์
๋๋ค. ๋ํ ์ํํ ๋ถ์์ ๋ฐํ์ผ๋ก, ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ๋์ด๋ ์ฒซ ๋ฒ์งธ PoC๋ ์ด ํน์ ๋ฒ์ ์์๋ ์๋ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ๊ฒฐ๋ก ์ ๋ด๋ฆด ์ ์์ต๋๋ค. ์ทจ์ฝํ PHP ํ์ผ์ ์คํํ๋ ค๋ฉด ์ถฉ์กฑํด์ผ ํ๋ ๋ช ๊ฐ์ง ์กฐ๊ฑด์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒฐ๋ก : CVSS ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ทจ์ฝ์ ์ ์ฌ๊ฐ๋๋ฅผ ํ๋จํ ๋ ๋งค์ฐ ์ฃผ์ํด์ผ ํฉ๋๋ค. ์ ๋ ์ด CVE๊ฐ 9.8(CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)๋ก ํ๊ฐ๋์๊ธฐ ๋๋ฌธ์ ๋ถ์ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ์ ์ด๋ ์ด ๋ฒ์ ์ ๊ฒฝ์ฐ, ๊ณต๊ฒฉ์๊ฐ ์ด๋ฅผ ์ต์คํ๋ก์ํ๋ ค๋ฉด ์๊ฒฉ ์ฆ๋ช
์ด ํ์ํ๋ค๋ ๊ฒ์ด ๋ถ๋ช
ํฉ๋๋ค.
๋ค์ ๋จ๊ณ๋ก๋ ๋ผ์ฐํฐ ์์ฒด์ ์ ๊ทผํ์ง ์๊ณ ๋ ์ด ์ทจ์ฝ์ ์ ์ต์คํ๋ก์ํ ์ ์๋๋ก ์ด ๋ฐ์ด๋๋ฆฌ๋ฅผ ์๋ฎฌ๋ ์ด์
ํ๋ ์์
์ ํ ๊ฒ์
๋๋ค. ํ์ง๋ง ๊ทธ๊ฒ์ ๋ค์ ๊ฒ์๋ฌผ์ ์ฃผ์ ๊ฐ ๋ ๊ฒ์
๋๋ค!
์ฝ์ด์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค.
## ์ฐธ๊ณ ์๋ฃ
* CVE-2018-19986์ ๋ํ Ogur1 ๋ถ์ ๊ธ
* /dev/tty0 D-Link HNAP ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ
* Pedro Ribeiro์ HNAP ๊ถ๊ณ
* CVE-2018-19987 PoC #0, Mario Ceballos ์์ฑ
* CVE-2018-19987 PoC #1, Mingeun Kim ์์ฑ
* CVE-2018-19987 ์ธ๋ถ ์ ๋ณด ๋งํฌ
* D-Link ํ์จ์ด ๋ณตํธํ
* Binwalk
* pro0v3rbs PoC