تلقيت مؤخرًا من قسم الأمن تنبيهًا بشأن ثغرة في MinIO

للوهلة الأولى، تبدو هذه الثغرة خطيرة جدًا، ولا بد من إصلاحها سريعًا.
وهكذا، بدأت العمل على الترقية.
أولًا، نتأكد من أن إصدار MinIO الذي نستخدمه هو 2021-03-26T00:00:41Z
اختير هذا الإصدار لأن ترخيصه هو Apache License 2.0 ,وهو آخر إصدار من MinIO يمكن استخدامه تجاريًا مجانًا دون الحاجة إلى نشر الشيفرة المصدرية.
في الإصدارات اللاحقة لهذا الإصدار، غيّرت MinIO اتفاقية الترخيص إلى AGPL V3.
وفقًا للتقرير، فإن هذه الثغرة
تأكيد الإصدارات المتأثرة: RELEASE.2019-12-17T23-16-33Z <= MinIO < RELEASE.2023-03-20T20-16-18Z
الإصدار الذي يتضمن الإصلاح: RELEASE.2023-03-20T20-16-18Z
الإصدار الذي نستخدمه حاليًا من بين الإصدارات المتأثرة.
لأن الإصدار الذي نستخدمه قديم جدًا، لم نجرؤ على الترقية إلى إصدار رئيسي أحدث.
لذلك فكرت في تنزيل الشيفرة المصدرية بنفسي، ثم إعداد رقعة لإصلاح المشكلة استنادًا إلى أجزاء الشيفرة المصدرية التي كشف عنها التقرير.
// minio/cmd/bootstrap-peer-server.go
func (b *bootstrapRESTServer) VerifyHandler(w http.ResponseWriter, r *http.Request) { ctx := newContext(r, w, "VerifyHandler") cfg := getServerSystemCfg() logger.LogIf(ctx, json.NewEncoder(w).Encode(&cfg)) }
// minio/cmd/bootstrap-peer-server.go
func getServerSystemCfg() ServerSystemConfig { envs := env.List("MINIO_") envValues := make(map[string]string, len(envs)) for _, envK := range envs { // تخطي بعض متغيرات البيئة كجزء // من قائمة السماح ويمكن تهيئته // يختلف من عقدة إلى أخرى، حدّث skipEnvs() // اربط القيم إن وُجدت قيم بيئة كهذه if _, ok := skipEnvs[envK]; ok { continue } envValues[envK] = env.Get(envK, "") } return ServerSystemConfig{ MinioEndpoints: globalEndpoints, MinioEnv: envValues, } }
لكن عندما نزّلت الشيفرة المصدرية وانتقلت إلى فرع الإصدار الذي نستخدمه، وجدت أن هذا الإصدار لا يحتوي على الشيفرة المذكورة في التقرير
func (b *bootstrapRESTServer) VerifyHandler(w http.ResponseWriter, r *http.Request) {
ctx := newContext(r, w, "VerifyHandler")
cfg := getServerSystemCfg()
logger.LogIf(ctx, json.NewEncoder(w).Encode(&cfg))
w.(http.Flusher).Flush()
}func getServerSystemCfg() ServerSystemConfig {
return ServerSystemConfig{
MinioPlatform: fmt.Sprintf("OS: %s | Arch: %s", runtime.GOOS, runtime.GOARCH),
MinioEndpoints: globalEndpoints,
}
}يا إلهي، ما الذي يحدث؟ ما الذي يحدث؟ما الذي يحدث؟
وفقًا للتقرير، توجد أداة تحقق يمكن استخدامها للتحقق من هذه الثغرة.https://github.com/MzzdToT/CVE-2023-28432
نُزّلت شيفرة التحقق من الثغرة، وأظهرت نتيجة تنفيذها أن الإصدار الذي نستخدمه غير متأثر.

بدأت الآن أشك في أن نطاق الإصدارات الوارد في التقرير خاطئ، لذا قارنت شيفرة MinIO المصدرية

بعد مقارنة الشيفرة، تبيّن أن أول إصدار تضمّن هذا العيب فعليًا هو RELEASE.2021-08-31T05-46-54Z
لا يزال من غير الممكن التأكد من صحة تخميني، فبدأت أبحث لدى MinIO رسميًا عن الإعلان المتعلق بهذه الثغرة
https://github.com/minio/minio/security/advisories/GHSA-6xvq-wj2x-3h3q

اتضحت الحقيقة للجميع؛ فقد أعلنت الجهة الرسمية لـMinIO نطاق الإصدارات المتأثرة الصحيح
الإصدارات المتأثرة
RELEASE.2021-08-31T05-46-54Z
الإصدارات المصححة
RELEASE.2023-03-20T20-16-18Z
الإصدار الذي نستخدمه لا يقع ضمن نطاق الإصدارات المتأثرة.
بعد هذه الواقعة، بحثت في مقالات كثيرة.
آه، حتى شركات الأمن هذه داخل البلاد، تنسخ كل واحدة منها الأخرى.
هذا المقال
https://cloud.tencent.com/developer/article/2315008
انتحال
https://www.h3c.com/cn/d_202304/1830808_30003_0.htm
هذا المقال
https://www.h3c.com/cn/d_202304/1830808_30003_0.htm
ينسخ مجددًا
https://github.com/minio/minio/security/advisories/GHSA-6xvq-wj2x-3h3q
وفي النهاية، نسخ الإصدار الخطأ أيضًا، يا لها من ورطة!
سأنشر فيما يلي روابط المقالات التي عثرت عليها بالبحث؛ كلها من تأليف حفنة من المضللين، وسأجلدها نقدًا بلا رحمة حتى بعد موتها.
https://stack.chaitin.com/techblog/detail/62
https://mp.weixin.qq.com/s/JgskenAZ6Cpecoe2k2AEjQ
https://blog.nsfocus.net/miniocve-2023-28432/
https://www.freebuf.com/vuls/363647.html
https://cloud.tencent.com/developer/article/2315008
https://www.h3c.com/cn/d_202304/1830808_30003_0.htm
https://zone.huoxian.cn/d/2708-cve-2023-28432-minio/17
https://www.cve.org/CVERecord?id=CVE-2023-28432