llama.cppプロジェクトは、RPCサーバーの重大なセキュリティ脆弱性に対処するバージョンb11000をリリースしました。この修正は、認証されていないリモートクライアントがキャッシュされた計算グラフを操作することでリモートコード実行を実現できる使い切り後の解放バグを解決します。

  • 以前の機能実装では、GRAPH_RECOMPUTE操作中にテンソルデータを再送信しないために、デバイスごとに計算グラフをキャッシュしていました。
  • これらのキャッシュされたノードはバックエンドバッファへの直接ポインタを保持しており、FREE_BUFFER経由でバッファが解放されると、その後の再実行でデッドポインタにアクセスしてしまいます。
  • 攻撃者はALLOC_BUFFERおよびSET_TENSORコマンドを使用してメモリチャンクをリシェイプし、libcアドレスの漏洩やバッファインターフェースvtableの乗っ取りを行うことができました。
  • このパッチはfree_buffer()内ですべてのキャッシュされたグラフを破棄し、クライアントが次の呼び出し時にGRAPH_COMPUTEにフォールバックするようになります。

この更新により、プロトコルまたはAPIの変更を必要とせずにllama.cpp RPCサーバーを対象としたリモートコード実行の悪用を防ぐことができます。