From 59d0b3c19ccc0b5cc6c344a72ba897cf77176456 Mon Sep 17 00:00:00 2001 From: thisgun Date: Mon, 11 May 2026 06:04:06 +0000 Subject: [PATCH] =?UTF-8?q?[security]KVE-2026-0859=20KCP=20CLI=20Windows?= =?UTF-8?q?=20=ED=99=98=EA=B2=BD=20=EB=AA=85=EB=A0=B9=20=EC=9D=B8=EC=A0=9D?= =?UTF-8?q?=EC=85=98(RCE)=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit shop/kcp/pp_cli_hub_lib.php, shop/kcp/pp_ax_hub_lib.php 의 mf_do_tx() Windows 분기가 사용자 입력이 포함된 KCP CLI 인자를 큰따옴표로 감싼 단일 문자열로 만들어 mf_exec() 첫 인자로 전달했고, mf_exec() 는 첫 인자를 escape 없이 exec() 에 넘겨 Windows cmd.exe 메타문자(`"`, `&` 등)로 인증 없는 OS 명령 실행이 가능했음. Linux 분기와 동일하게 실행 파일 경로와 콤마 구분 인자 문자열을 분리하여 mf_exec($bin_exe, $args) 형태로 호출하도록 변경. mf_exec() 의 foreach 가 두 번째 이후 인자에 escapeshellarg() 를 자동 적용하여 cmd.exe 메타문자가 안전하게 wrapping 됨. Co-Authored-By: Claude Opus 4.7 (1M context) --- shop/kcp/pp_ax_hub_lib.php | 8 ++++---- shop/kcp/pp_cli_hub_lib.php | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/shop/kcp/pp_ax_hub_lib.php b/shop/kcp/pp_ax_hub_lib.php index d21c5d210..4e3ff17f2 100644 --- a/shop/kcp/pp_ax_hub_lib.php +++ b/shop/kcp/pp_ax_hub_lib.php @@ -168,9 +168,10 @@ { if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { - $bin_exe = $home_dir.'/bin/pp_cli_exe '; + // 실행 파일 경로와 인자를 분리하여 mf_exec 호출 → escapeshellarg 자동 적용 (KVE-2026-0859) + $bin_exe = $home_dir.'/bin/pp_cli_exe'; - $res_data = $this->mf_exec($bin_exe . "\"". + $res_data = $this->mf_exec($bin_exe, "site_cd=" . $site_cd . "," . "site_key=" . $site_key . "," . "tx_cd=" . $tx_cd . "," . @@ -188,8 +189,7 @@ $ordr_data . $rcvr_data . $escw_data . - $modx_data . - "\"") ; + $modx_data) ; } else { diff --git a/shop/kcp/pp_cli_hub_lib.php b/shop/kcp/pp_cli_hub_lib.php index 105a6f27e..06b5322c7 100644 --- a/shop/kcp/pp_cli_hub_lib.php +++ b/shop/kcp/pp_cli_hub_lib.php @@ -161,9 +161,10 @@ class C_PAYPLUS_CLI_T { if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { - $bin_exe = $home_dir.'/bin/pp_cli_exe '; + // 실행 파일 경로와 인자를 분리하여 mf_exec 호출 → escapeshellarg 자동 적용 (KVE-2026-0859) + $bin_exe = $home_dir.'/bin/pp_cli_exe'; - $res_data = $this->mf_exec($bin_exe . "\"". + $res_data = $this->mf_exec($bin_exe, "site_cd=" . $site_cd . "," . "site_key=" . $site_key . "," . "tx_cd=" . $tx_cd . "," . @@ -181,8 +182,7 @@ class C_PAYPLUS_CLI_T $ordr_data . $rcvr_data . $escw_data . - $modx_data . - "\"") ; + $modx_data) ; } else {