
全網最詳細的Spring入門教程
User class with 字段如下所示:role
class User(BaseModel):
username: str
first_name: Union[str, None] = None
last_name: Union[str, None] = None
phone_number: Union[str, None] = None
role: Union[str, None] = None
利用此漏洞非常簡單。例如,可以發送以下 curl HTTP 請求來更改當前用戶的角色,以對餐廳的員工執行權限提升:
curl -X 'PUT' \
'http://localhost:8080/profile' \
-H 'accept: application/json' \
-H 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJNaWtlIiwiZXhwIjoxNzE2NzUxNjYwfQ.8khfY1H_2VLZPNuxptkEdOstuJlpME6ZAJNGnKZKFd0' \
-H 'Content-Type: application/json' \
-d '{
"username": "Mike",
"role": "Employee"
}'
下面顯示的 HTTP 響應正文成功地將角色更新為 Employee:
{
"username": "Mike",
"first_name": "Mike",
"last_name": "",
"phone_number": "",
"role": "Employee"
}
要修復此漏洞,建議實施一個新架構,該架構定義用戶可以更新哪些字段。這樣,用戶將無法更新架構中未包含的字段。以下代碼段顯示了不包含 field 的新架構。UserUpdate
UserUpdate
role
class UserUpdate(BaseModel):
username: str
first_name: Union[str, None] = None
last_name: Union[str, None] = None
phone_number: Union[str, None] = None
現在,UserUpdate 模式可以在如下所示的功能中使用:update_current_user_details
rom apis.auth.schemas import UserUpdate
...
@router.put("/profile", response_model=UserRead, status_code=status.HTTP_200_OK)
def update_current_user_details(
user: UserUpdate,
current_user: Annotated[User, Depends(get_current_user)],
db: Session = Depends(get_db),
):
db_user = update_user(db, user.username, user)
return current_user
為了防止此類漏洞,我建議采取以下措施:
建議的單元測試,以確保未經授權的用戶無法修改用戶的角色:
def test_update_role_by_customer_ignores_role_returns_200(test_db, customer_client):
data = {
"username": "customer",
"role": "Employee",
}
response = customer_client.put("/profile", json=data)
assert response.status_code == 200
assert db_customer.role == UserRole.CUSTOMER
手動或通過代碼審查檢測此類漏洞可能很有效。此外,靜態應用程序安全測試和動態應用程序安全測試工具可以幫助自動化檢測過程,但它可能需要根據所使用的技術調整自定義規則/工作流程。在撰寫本文時,通過自動化工具檢測此類漏洞具有挑戰性,如果不進行適當的項目特定調整,可能無法提供令人滿意的結果。
在本系列的第一篇文章中,我介紹了如何開發自定義 Semgrep rool 來檢測特定于項目的易受攻擊模式 — Web API Security Champion II: Broken Object Level Authorization。
在本文中,我為開發人員和安全工程師介紹了 Broken Object Property Level Authorization 漏洞,并提供了實際示例、修復和建議。這種對檢測和解決此類漏洞的見解將幫助您構建更安全的 API。
冪簡集成是國內領先的API集成管理平臺,專注于為開發者提供全面、高效、易用的API集成解決方案。冪簡API平臺可以通過以下兩種方式找到所需API:通過關鍵詞搜索API、或者從API Hub分類頁進入尋找。