
PoC
CryptoLibは、コアフライトシステム(cFS)を搭載した宇宙機と地上局間の通信を保護するために、CCSDS Space Data Link Security Protocol - Extended Procedures(SDLS-EP)を使用したソフトウェアのみのソリューションを提供します。バージョン1.3.3以前では、Crypto_TM_ProcessSecurity関数(crypto_tm.c:1735:8)にヒープオーバーフローの脆弱性が発生します。TMプロトコルパケットのSecondary Header Lengthを処理する際、Secondary Header Lengthがパケットの全長を超えると、パケットデータを動的に割り当てられたバッファp_new_dec_frameにコピーするmemcpy操作中にヒープオーバーフローが発生します。これにより、攻撃者は隣接するヒープメモリを上書きし、任意のコード実行やシステムの不安定化を引き起こす可能性があります。
影響:細工されたパケットは、p_new_dec_frameバッファへのmemcpy操作中にヒープメモリの破損を引き起こし、以下の可能性があります:
パッチ適用済みバージョン:810fd66d592c883125272fef123c3240db2f170f
poc.py - デュアルモードPythonスクリプト:
./poc.py generate [overflow_amount]
パラメータ:
overflow_amount:オーバーフローさせるバイト数(デフォルト:1024)例:
# 2048バイトオーバーフローのパケットを生成
./poc.py generate 2048 > evil_packet.hex
./poc.py check <hex_packet>
パラメータ:
<hex_packet>:TMパケットの16進数文字列例:
# 生成されたパケットを解析
./poc.py check $(cat evil_packet.hex)
[6バイトのプライマリヘッダ][2バイトのSecondary Header Length][ペイロード]
このスクリプトは、以下の条件を満たすパケットを作成します:
Secondary Header Length > (Total Packet Length - Header Offset)memcpy操作が利用可能なバイト数よりも多くのバイトをコピーしようとするavailable_space = total_length - (offset + length_field_size)
if claimed_length > available_space:
trigger_alert()
本ソフトウェアは以下の目的を意図しています:
本番システムでの使用や、明示的な許可なしでの使用は絶対に行わないでください。 メンテナは本ツールの誤用に対する一切の責任を負いません。