[보안] Laravel 쿼리 바인딩 보안 취약점, CVE-2021-21263

빈유검스감별사 작성일 21.01.21 11:27:13
댓글 1조회 13,034추천 6

### 취약점 해당 버전

2021-01-13 이전에 설치된 Laravel 4,5,6,7,8 모든 버전에서 발생하는 취약점입니다.


### 취약점 요약

취약점은 `where('id', $id)` 조건에서 $id 에 배열을 입력할 경우, 배열의 두번째 인자값을 통해 두번째 조건의 입력값을 강제로 할당할 수 있게 됩니다.

### 테스트 코드

```
use App\Models\User;

$id = request()->get('id');
$user = User::where('id', $id)->where('is_admin', 0)->first();
```

- 정상적인 경우

URL) http://example.com/dev?id=1 
Query) select * from `users` where `id` = '1' and `is_admin` = '0' limit 1;


- 취약점 공격을 시도한 경우

URL) http://example.com/dev?id[]=1&id[]=1
Query) select * from `users` where `id` = '1' and `is_admin` = '1' limit 1;

> PHP 소스 코드에선 is_admin=0 으로 조건을 주었으나, 사용자가 입력한 배열값에 의해 1로 강제로 바뀌는 문제 발생.

### 취약점 해결

6.20.12, 7.30.3, 8.22.1 버전은 보안 패치가 완료되었으므로 composer update 만으로 업데이트 됩니다.

4, 5 버전 사용중인 곳들은 중요 쿼리에 허용되지 않은 배열이 들어오지 않도록 입력값을 강화하는 등의 작업이 필요해 보입니다.

ex) validation rule 에 `string` 룰 추가시 배열 입력 불가

빈유검스감별사의 최근 게시물

개발자 인기 게시글