私が最近使用している6つのパスワードがデータ漏えいで危険にさらされていることに気づき、現在それらはプレーンテキストで公開されています。
資格情報の詰め込み の場合、攻撃者がパスワードを解読する方法や、パスワードを処理する方法はわかりません。
危険にさらされていることをあまり気にしていないウェブサイトで、パスワードをrm -rf / --no-preserve-root
、攻撃者が何らかの形の自動化を使用してパスワードをクラックおよびプラグしていると想定すると、攻撃者のマシンに影響を与える可能性がありますか?
これは、「xはyに脆弱である可能性がある」に簡略化できる他の多くの質問と同様であり、答えは「はい、可能ですが、そうではない」に要約できます。たとえば、有名で評判の良いパスワードクラッキングソフトウェアが、クラックされたパスワードをコマンドとして実行しようとするのは間違いだと非常に疑っています(補足:辞書にない限り、特にパスワードがクラックされる可能性は低いです)。
ただし、単一の攻撃者がどこかに複数のスクリプトを貼り付けて、パスワードのバリアントが実際に機能するというミスを犯した可能性があります。現状のパスワードは、コマンドラインに直接渡されるか、exec()
を呼び出さない限り、脅威になりません。攻撃者があなたのパスワードをクラックし、これらのバリアントの1つを含む架空のプログラムへの引数として貼り付けたとしましょう:
# ./hack_user_with_password_i_just_stole --user [email protected] --password rm -rf / --no-preserve-root
# ./hack_user_with_password_i_just_stole --user [email protected] --password "rm -rf / --no-preserve-root"
これらはどちらも無害です。プログラムはおそらくスペースでつまずくので、最初のものはおそらく機能しません。ただし、注意せずに貼り付けた場合に発生する可能性があります。
パスワードに歯を与えるために、;
、&&
、または||
を前に付けることができるので、シェルはそれを個別のコマンドとして扱います。
# ./hack_user_with_password_i_just_stole --user [email protected] --password ;rm -rf / --no-preserve-root
# ./hack_user_with_password_i_just_stole --user [email protected] --password ";rm -rf / --no-preserve-root"
最初のコマンドを実行するのに不運だった場合、シェルは;
以降のすべてを最初のコマンドとは別のコマンドとして処理するため、悪意のあるコマンドは実際に実行されます。ただし、2番目のコマンドは機能しません。引用符により、パスワード全体が単一の引数としてプログラムに渡されるためです。
現在、このようなパスワードを貼り付けることはほとんどありませんが、それが発生する可能性のある他の方法がいくつかあります。おそらく攻撃者は、ファイルからクラックされたパスワードを取得して、クレデンシャルを詰め込む目的でそれらを別のプログラムに渡すスクリプトを持っているかもしれません。
cracked_passwords.txt:
[email protected],password1234
<snip>
[email protected],;rm -rf / --no-preserve-root
<snip>
hack_script.py:
#!/usr/bin/env python3
import os
with open('cracked_passwords.txt') as f:
for line in f:
user, password = line.split(',')
os.system("./hack_user_with_password_i_just_stole --user {} --password {}".format(user, password)
攻撃者がナイーブで、パスワードにスペースを含めることを計画していない場合、ペイロードはここで機能します。引数を引用符で囲んだとしても、パスワードに追加の引用符を使用することで無効にすることができます。とはいえ、これらの各ハードルでは、パスワードをさらに複雑にする必要があり、最初から解読される可能性が低くなります。
ご覧のとおり、技術的には可能ですが、このシナリオはかなり具体的であり、起こりそうにありません。