Cで記述されている、世界中の約60億のデバイスにインストールされている人気のあるcurlおよびlibcurlツールは、メモリセーフでない言語の使用に起因するよく知られたセキュリティ問題にさらされている。新しいイニシアチブは、Rust Hyperライブラリに基づくcurl用のメモリセーフなHTTP/HTTPSバックエンドを提供することを目的としている。
すべての脆弱性がメモリ安全性の問題に起因するわけではなく、curlを「安全でない」と見なすべきではないことは事実であるが、作成者でありメンテナであるDaniel Stemberg氏は、メモリ安全性の保証で知られるRustのような言語を使用すると、実装をより安全にすることに貢献し、したがってよりセキュアになる、と述べている。確かに、ハッカーニュースのあるコメントが観察しているように、
しかし、これはcurlがRustで書き直されるという意味ではない。Stemberg氏によると、新しい実装が存在するすべてのクライアントとの互換性を維持することを保証するのは非常に難しいため、失敗する運命にある困難なタスクである。
代わりに、Stemberg氏が採用するアプローチは、curlに新しいバックエンドを追加することである。curlのバックエンドは、通常、サードパーティのライブラリを利用して特定のタスクを実行するコンポーネントである。たとえば、curlにはTLS、SSH、名前解決、LDAPなどのバックエンドがある。この意味で、curlとlibcurlは、よく知られた確立されたAPI/ABIからコンパイルされる特定のバックエンドへのブリッジとして機能する。
Stemberg氏が作業の基礎となるRustライブラリは、高度な同時実行と高速化を目的とした、高速HTTP/1およびHTTP/2のHyperの実装である。最初のステップは、HyperにC APIを提供させることであり、Stemberg氏は、開発を遅らせ、タイムラインの修正をほぼ不可能にするかもしれない多くのハードルを認識している。
実際、Hyperはcurlのバックエンドを強化する最初のRustライブラリではなく、quicheとMesalinkはすでにcurlのエコシステムの一部になっている。Stemberg氏の取り組みが成功した場合、Rustに他の多くのバックエンドが実装される可能性がある。
正直なところ、Rustのようなメモリ安全性が保証された言語を使用することは、コードの一部にメモリ安全性の問題がないことを保証するものではない。実際のところ、すべてのメモリセーフ言語では、特別な構造でコードのチャンクを安全でないものとしてマークするため、コンパイラはその動作を緩和できる。これは、52の依存関係があり、安全でないコードブロックのインスタンスが1500を超えるRustとHyperにも当てはまる。
Stemberg氏の取り組みは、Let's Encryptの背後にある組織であるISRGによって資金提供される:
この問題のリーダーになる意欲のあるStemberg氏に感謝します。大成功を収めたソフトウェアの構築方法にこのような重要な変更を加えることは簡単ではありませんが、すばらしい計画を立て、世界で最も重要なネットワークソフトウェアの1つを大幅に安全にする予定です。このプロジェクトは、より重要なソフトウェアを保護する方法のテンプレートとして役立つと考えており、その過程で学ぶことに興奮しています。
この取り組みの一環として、Stemberg氏はHyperのサポートの追加に取り組むが、ISRGエンジニアはTLSバックエンドとしてRustlsのサポートを追加する。Rustlsは暗号の正確性について監査されており、非常に有望な結果が得られている。特に、最終レポートでは一般的な落とし穴を招くことなくTLSを正しく実装する能力をRustlsの作成者に強調し、問題は見つからなかった。。
Stemberg氏は、すでにHyperで動作するブランチを作成しており、最初のマイルストーンに向けて取り組んでおり、変更を加えることなく単一のcurlのテストケースを正常に実行している。