POC详情: cff57951757a4cd6699b4d925a545f40a28237df

来源
关联漏洞
标题: Atlassian Confluence Server 注入漏洞 (CVE-2021-26084)
描述:Atlassian Confluence Server是澳大利亚Atlassian公司的一套具有企业知识管理功能,并支持用于构建企业WiKi的协同软件的服务器版本。 Atlassian Confluence Server and Data Center 存在注入漏洞,经过身份验证的用户在Confluence 服务器或数据中心实例上执行任意代码。以下产品及版本收到影响:All 4.x.x versions、All 5.x.x versions、All 6.0.x versions、All 6.1.x ver
介绍
# CVE-2021-26084

Phạm vi ảnh hưởng

Phiên bản < 6.13.23

6.14.0 ≤ Phiên bản < 7.4.11

7.5.0  ≤ Phiên bản < 7.11.6

7.12.0 ≤ Phiên bản < 7.12.5

Nguyên nhân, Cách khai thác

Confluence sử dụng framework để map URL tới các lớp Java, tạo ra cái được gọi là “action”. Action URLs kết thúc bằng “.action” và được xác định trong tệp xwork.xml ở confluence-<version>.jar và trong tệp atlassian-plugin.xml trong các tệp JAR của các plugin đi kèm. Mỗi action chứa ít nhất một thuộc tính name, xác định tên hành động, một thuộc tính class, xác định class Java thực hiện action và ít nhất một phần tử result quyết định Velocity template sẽ hiển thị sau khi action được gọi dựa trên result của action. Các giá trị phổ biến được trả về từ các action là “error”, “input”, “success”, nhưng bất kỳ kết quả nào cũng có thể được sử dụng nếu nó phù hợp với phần tử result trong XWork XML.  Các action có thể chứa thuộc tính phương thức cho phép gọi một phương thức cụ thể của class Java đã chỉ định. Khi không có lệnh nào được chỉ định, phương thức doDefault() sẽ được gọi. Dưới đây là mục action cho createpage-entervariables action:

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/bd19f06f-1f1a-45d6-b14c-b931a1d5c307)

Phương thức doEnter() của class com.atlassian.confluence.pages.actions.PageVariablesAction xử lý các yêu cầu tới doenterpagevariables.action và trả về các giá trị “error”, “input”, “success”. Điều này dẫn tới Velocity template sẽ được hiển thị.

Ở đây, giá trị thuộc tính “name” của một phần tử action tương ứng với một đường dẫn /<nameValue>.action và phần tử chứa template nào sẽ được hiển thị như một phần của phản hồi dựa trên error/success,... Vì vậy theo ví dụ này chỉ cần truy cập /pages/doenterpagevariables.action sẽ hiển thị tệp velocity template.

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/74a117b4-13fe-4ff3-a6f6-10e361fae2b8)

Chúng ta có thể thấy velocity template được hiển thị như thế nào trong trang HTML

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/5a54acd1-2d2b-417a-bc6e-49527e2b0992)

Nhập tên thẻ trong template làm tham số và nhận thấy rằng các giá trị được lấy từ tham số request và được trả lại trong response.

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/314a810a-e764-4dd4-8531-e323b46b7826)

Cách sử dụng của #tag : #tag (“attribute1”, “attribute2”, “attribute3”)

Các attribute này trong quá trình render sẽ được lấy tại AbstrctTagDirective.applyAttributes()

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/81d6f6c1-d4d4-4e7c-971d-7a9bf7c53bd6)

#tag ("Hidden" "name='queryString'" "value='ahihihi'")

Sau khi các attribyte được lấy ra bởi phương thức AbstrctTagDirective.applyAttributes(), nó được truyền vào AbstrctUITag.doEndTag()  AbstractUITag.evaluateParams()

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/c1189a4d-81d6-4816-9b3e-15ec630bfd4d)

Sau đó tiếp tục được truyền vào WebWorkTagSupport.findValue()  OgnlValueFinder.findValue() với dạng expression

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/692726a4-b2ae-49b1-9ed4-312d28e2ecee)

Sau đó truyền vào SafeExpressionUtil.isSafeExpression()

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/6849b5c3-9fd2-4c8f-a4e4-5da7525efb3e)

Tại đây expression đã được truyền vào compile, kiểm tra blacklist và đẩy vào cache. Qua bước compile sẽ được compile sang dạng ASTConst khi được đánh giá thì sẽ return về chuỗi đã được compile từ trước.

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/179af5f8-2222-42f6-88dd-f821a9ab6d8f)

Khi expression được thêm dấu “’” từ input thì đã bị escape sang dạng html entity 

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/ab43d9f1-c5d8-4ebb-b522-075fdbc06f4a)

Điểm escape là tại HtmlAnnotationEscaper.annotatedValueInsert()

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/bb3559fe-6e05-44d6-9f18-789f67ecc719)

Tại đây phương thức ognl.JavaCharStream.readChar() được gọi và đánh giá các ký tự Unicode escape, do đó khi truyền “\u0027” vào thì nó sẽ convert sang “’”. Do đó có thể escape và nối thêm OGNL expression

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/bf7e4ce2-5624-4814-90eb-9699c8b003bb)

Nhưng phải vượt qua được blacklist của OGNL như sau

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/0766e0a6-a758-4068-84c6-fd637930d04b)

Có thể vượt qua bằng cách sử dụng Array accessors thay vì sử dụng phương thức “getClass” hoặc thuộc tính “.class”. 

queryString=aaa\u0027%2b#{\u0022\u0022[\u0022class\u0022]}%2b\u0027bbb

![image](https://github.com/nahcusira/CVE-2021-26084/assets/87233531/afae2cc0-8dfb-4a37-b334-0b5b3e5c6f29)

Cách thức phát hiện

Giám sát tất cả các yêu cầu lưu lượng HTTP trong đó thành phần đường dẫn của URI yêu cầu chứa một trong các chuỗi trong cột " URI Path" của bảng sau:

URI Path	                                       |          Vulnerable Parameters

/users/darkfeatures.action	                     |          featureKey

/users/enabledarkfeature.action	                 |          featureKey

/users/disabledarkfeature.action	               |          featureKey

/login.action	                                   |          token

/dologin.action	                                 |          token

/signup.action	                                 |          token

/dosignup.action	                               |          token

/pages/createpage-entervariables.action	         |          queryString, linkCreation

/pages/doenterpagevariables.action	             |          queryString

/pages/createpage.action	                       |          queryString

/pages/createpage-choosetemplate.action	         |          queryString

/pages/docreatepagefromtemplate.action	         |          queryString

/pages/docreatepage.action	                     |          queryString

/pages/createblogpost.action	                   |          queryString

/pages/docreateblogpost.action	                 |          queryString

/pages/copypage.action	                         |          queryString

/pages/docopypage.action	                       |          queryString

/plugins/editor-loader/editor.action	           |          syncRev

Nếu tìm thấy yêu cầu như vậy thì nên kiểm tra phương thức HTTP request. Nếu phương thức yêu cầu là POST, thì tìm Vulnerable Parameters tương ứng từ bảng trên trong phần body của HTTP request và nếu phương thức yêu cầu là GET, thì tìm các parameter trong request-URI của HTTP request. Kiểm tra xem giá trị của bất kỳ Vulnerable Parameters nào có chứa chuỗi “\u0027” hoặc dạng mã hóa URL của chuỗi đó hay không. Nếu vậy, lưu lượng truy cập sẽ được coi là độc hại và một cuộc tấn công khai thác lỗ hổng này có thể đang diễn ra.
文件快照

[4.0K] /data/pocs/cff57951757a4cd6699b4d925a545f40a28237df └── [7.6K] README.md 0 directories, 1 file
神龙机器人已为您缓存
备注
    1. 建议优先通过来源进行访问。
    2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
    3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。