DIRAC는 SQL 주입 + 평가를 통해 FileCatalog DatasetManager의 RCE에 취약합니다.
FileCatalog DatasetManager는 데이터베이스에 대한 쿼리를 실행하고 결과를 eval에 전달합니다. SQL 쿼리에는 인증된 사용자가 평가에 반환된 매개변수를 제어하여 원격 코드를 실행할 수 있게 하는 주입 취약점이 포함되어 있습니다.
FileCatalog checkDataset 함수는 해당 데이터 세트 인수를 백엔드 DB 핸들러에 직접 전달합니다. https://github.com/DIRACGrid/DIRAC/blob/f7e0a3ac153315030fb3520e8ca747f013758967/src/DIRAC/DataManagementSystem/Service/FileCatalogHandler.py#L591-L593
그러면 이를 __checkDataset 함수에 전달합니다. https://github.com/DIRACGrid/DIRAC/blob/f7e0a3ac153315030fb3520e8ca747f013758967/src/DIRAC/DataManagementSystem/DB/FileCatalogComponents/DatasetManager/DatasetManager.py#L390
이는 f-문자열을 사용하여 이스케이프하지 않고 쿼리를 생성하므로 SQL 주입이 발생합니다. https://github.com/DIRACGrid/DIRAC/blob/f7e0a3ac153315030fb3520e8ca747f013758967/src/DIRAC/DataManagementSystem/DB/FileCatalogComponents/DatasetManager/DatasetManager.py#L400-L402
SQL 주입으로 인해 사용자가 제어할 수 있는 결과는 반환 즉시 eval로 전달되어 코드 실행으로 이어집니다. https://github.com/DIRACGrid/DIRAC/blob/f7e0a3ac153315030fb3520e8ca747f013758967/src/DIRAC/DataManagementSystem/DB/FileCatalogComponents/DatasetManager/DatasetManager.py#L409
동일한 파일에는 유사한 패턴을 사용하고 유사한 방식으로 악용될 가능성이 있는 다른 함수가 있습니다.
이를 통해 인증된 사용자는 서버에서 명령을 실행할 수 있으며, 이는 DIRAC 시스템을 완전히 손상시킬 수 있습니다(로컬 dirac.cfg를 읽고, 데이터베이스 비밀번호를 얻고, 저장된 모든 프록시 및 토큰을 내보낼 수 있습니다). 로컬 로깅을 사용하는 경우 로그에서 악용 증거를 제거할 수도 있습니다.
https://pypi.org/project/DIRAC/8.0.79/ https://pypi.org/project/DIRAC/9.0.22/ https://pypi.org/project/DIRAC/9.1.10/
왜 이 VPI인가 (설명가능 · 실험적)
VPI 산정 기준
| 영향도 | 99.00 |
| 악용 신호(추가 악용신호 없음) | ×1.00 |
| VPI | 99.00 |
VPI 공식 vpi-v1 기준