
このリポジトリには、Black Hat USA 2026 および DEF CON 34 で発表された講演「Forgotten but Not Gone: Unauthenticated RCEs and LPEs in Legacy Linux Services」で紹介された脆弱性の概念実証スクリプトが含まれています。
TelnetD におけるローカル権限昇格: 非特権攻撃者は、TelnetD の環境変数機能を悪用して、root 権限のシェルを取得できます。設計上およびその RFC に従い、Telnet プロトコルはクライアントがシェルセッションの環境変数を設定できるようにします。この機能は、セキュリティの観点からは不適切に設計されていました。このサービスは、認証されていないクライアントが、telnetd プロセス自体とそのすべてのサブプロセスの環境変数を設定することを許可していました。そのサブプロセスの 1 つが /usr/bin/login です。リモートの Telnet クライアントとして環境変数を設定することで、「CREDENTIALS_DIRECTORY」という環境変数を指定して /usr/bin/login を起動することができました。これにより、login プロセスは、「CREDENTIALS_DIRECTORY」で指定されたディレクトリ内で「login.noauth」という名前のファイルを検索します。ファイルに文字列「yes」が含まれている場合、login プロセスは認証をスキップし、クライアントが指定したユーザーとして動作するシェルをクライアントに提供します。任意のユーザー (root でも) を指定できます。
Samba の SAMR を介した認証されていないリモートコード実行: Samba は、クライアントから要求されたさまざまな操作 (ネットワーク共有の追加、プリンタの追加など) を実行するために、設定ファイル (smb.conf) で設定されたシェルコマンドに依存しています。これらのシェルコマンドの一部は、クライアントから送信された要求に基づいてパラメータを受け取ります。ほとんどの場合、パラメータはサニタイズされ、シェルインジェクションを防ぐために、コマンド実行前に特殊文字がエスケープされます。
脆弱性は、クライアントが指定した文字列をサニタイズせずにシェルコマンドにフォーマットする関数「check_password_complexity」にあります。この脆弱性には 2 つの条件が必要です:
Samba の RPC デーモン (samba-dcerpcd) が NCACN_IP_TCP を使用するように構成するには、それをメインの Samba サービスの一部としてではなく、独立したシステムサービスとして起動する必要があります。また、設定ファイル内の「rpc start on demand helpers」オプションを「no」に設定する必要があります。
Samba の SPOOLSS を介した認証されていないリモートコード実行: 関数 generic_job_submit も、クライアントが制御する文字列をサニタイズせずにシェルコマンドにフォーマットします。次の設定の組み合わせがこの脆弱性を引き起こします:
認証されていないクライアントは、spoolss RPC インターフェースを介してプリンタ共有へのアクセスを要求できます。その後、関数 RpcStartDocPrinter を使用して印刷ジョブを送信できます。要求で指定されたドキュメント名は、コマンドの「%J」パラメータにフォーマットされるジョブ名として使用されます。hRpcEndDocPrinter を呼び出すと generic_job_submit がトリガーされ、ジョブ名をサニタイズせずにフォーマットした後、設定から「print command」を実行します。エクスプロイトによって送信されたコードは、ユーザー「nobody」として実行されます。プリンタ共有セクションに設定「valid users = @users」が追加されている場合、悪用は依然として可能ですが、有効な認証情報が必要です。認証が実行された場合、エクスプロイトによって送信されたコードは「nobody」ではなく認証されたユーザーとして実行されます。