
CVE-2019-12255、CVE-2019-12256、CVE-2019-12258、およびCVE-2019-12260を検出するためのSuricata LUAスクリプト
CVE-2019-12255、CVE-2019-12256、CVE-2019-12258、およびCVE-2019-12260を検出するためのSuricata LUAスクリプト
このスクリプトはCVE-2019-12255をチェックします。チェックされるパケットにはPSH、ACK、URGフラグが設定され、ペイロードサイズが1500バイトを超えている必要があります。次に、緊急ポインタの値が0に設定されているかどうかを確認します。これにより、影響を受けるデバイスで整数アンダーフローが発生します。
このエクスプロイトは、緊急ポインタを0に設定してアンダーフローさせることに基づいています。この欠陥により、ターゲットのrecv()における長さ制約が無視され、TCPウィンドウから利用可能なすべてのデータがユーザー指定のバッファにコピーされます。ルールはペイロードが1500バイトを超えているかどうかをチェックします。
このスクリプトはCVE-2019-12256をチェックします。チェックされるパケットは、IPパケット内に2つのLSRRまたはSSRRオプションを含みます。LSRRオプションは16進値0x83で認識でき、SSRRオプションは16進値0x89で認識できます。このエクスプロイトは無効な値で構成されており、その長さはルートを定義するときに通常使用される長さ(最小4バイト)よりも短く、サーバーに送信されるパケット内に2回存在します。以下のIPオプションは、無効なLSRRオプションによってスタックオーバーフローを引き起こします。
| Type LSRR | Length | LSRR-Pointer | Type LSRR | Length | LSRR-Pointer |
|---|---|---|---|---|---|
| \x83 | \x03 | \x27 | \x83 | \x03 | \x27 |
以下のIPオプションは、無効なSSRRオプションによってスタックオーバーフローを引き起こします。
| Type SSRR | Length | SSRR-Pointer | Type SSRR | Length | SSRR-Pointer |
|---|---|---|---|---|---|
| \x89 | \x03 | \x27 | \x89 | \x03 | \x27 |
このスクリプトはCVE-2019-12258をチェックします。関係するパケットにはPCAP内でコメントが付けられています。最初の検出では、2つのウィンドウスケールオプション(1つは無効、1つは有効)がチェックされます。2回目は、無効なウィンドウスケールオプションを1つ保持する非兵器化されたDoSバリアントです。
ウィンドウスケールオプションは、このオプションが使用されていることを示すために値03を持ち、TCPパケットのオフセット57に設定されています。このエクスプロイトをトリガーするには、エクスプロイトの値が2(無効)である必要があります。この値はオフセット58にあります。値がチェックされ、その場合は1(一致)を返します。
このスクリプトはCVE-2019-12260をチェックします。チェックされるパケットは、不正な形式のSYNパケットで構成されており、このパケットには3バイト以下のバイト値を持つTCP-AOオプションフィールドが含まれています。TCP-AOオプションは、RFCに従って16進値0x29で設定できます: https://tools.ietf.org/html/rfc5925#page-7
このエクスプロイトは、TCP-AOオプションを3バイト以下の任意の値に設定して不正な形式にすることに基づいています。これは、オフセット56にオプションとして16進値0x29が設定されていることを確認することでチェックできます。