Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon GraphQL에서 WhenLoaded ()를 사용할 때 일반적인 보안 함정은 무엇입니까?


GraphQL에서 WhenLoaded ()를 사용할 때 일반적인 보안 함정은 무엇입니까?


GraphQL에서`whenloaded ()`를 사용하는 경우 일반적으로 관련 데이터 또는 연관성 (예 : ORM 기반 GraphQL Resolvers)을 조건부로드하는 방법 인 경우 몇 가지 일반적인 보안 함정이 발생할 수 있습니다. 이러한 함정은 주로 더 넓은 GraphQL 보안 문제와 관련이 있지만 특히 관련이 있습니다.`whenloaded ()`는 종종 추가 중첩 또는 관련 데이터를 가져와 복잡성과 위험이 증가하기 때문에 특히 관련이 있습니다.

whenloaded ()
`` '가있는 일반적인 보안 함정

** 1. 일관성이 없거나 누락 된 승인 점검
`whenloaded ()`종종 초기 리졸버가 실행 된 후 중첩 또는 관련 데이터의로드를 트리거합니다. 권한 부가 로직이 모든 리졸버 또는 데이터 로딩 포인트 (whenloaded ()`)에 의해 트리거 된 것을 포함하여 인증 로직이 일관되게 적용되지 않으면 무단 사용자가 민감한 데이터에 액세스 할 수 있습니다. 이것은 동일한 데이터에 대한 일부 경로가 보호되는 일반적인 문제이지만, 다른 경로 (`whenloaded ()`)와 같은 다른 경로는 그렇지 않으므로 공격자는 액세스 제어를 우회 할 수 있습니다 [4] [6]. 승인은 쿼리 레벨과 모든 중첩 된 리졸버 또는 데이터 로더 모두에서 시행되어야합니다.

** 2. 서비스 거부 (DOS)로 이어지는 과도한 가져 오기 및 복잡한 쿼리
`whenloaded ()`를 사용하면 많은 양의 관련 데이터를 가져 오는 깊이 중첩 된 쿼리가 발생할 수 있습니다. 공격자는 과도한 데이터로드 및 처리를 유발하는 쿼리를 제작하여 자원 소진 및 DOS로 이어질 수 있습니다. 단일 쿼리에서 여러 관련 객체를 가져 오는 기능은 자원 사용을 예측하기가 어렵고`whenloaded ()`추가 데이터를 조건부로로드하여이를 악화시킬 수 있습니다 [4] [5]. 완화에는 쿼리 깊이 제한, 복잡성 스코어링 및 속도 제한이 포함됩니다.

** 3. 부적절한 필드 선택을 통한 민감한 데이터의 노출
`whenloaded ()`어떤 필드가 노출되는지를 신중하게 제어하지 않고 관련 데이터를로드하는 경우, 암호, 토큰 또는 개인 사용자 세부 사항과 같은 민감한 정보가 실수로 GraphQL 응답에 반환 될 수 있습니다 [5]. 승인 검사가 누락되었거나 오류 메시지가 민감한 정보가 유출되는 경우이 위험이 높아집니다. 개발자는 중첩 데이터가로드 된 경우에도 민감한 필드가 노출되지 않도록해야합니다.

** 4. 부적절한 입력 검증을 통한 주입 공격
`whenloaded ()`가 동적 인수 또는 필터와 함께 사용되는 경우, 부적절한 입력 검증은 기본 데이터 페치가 올바르게 매개 변수화되지 않은 경우 GraphQL 쿼리 주입 또는 SQL 주입과 같은 사출 취약점으로 이어질 수 있습니다 [6]. 공격자는 데이터 가져 오기 로직을 ​​조작하는 악의적 인 쿼리 또는 명령을 주입 할 수 있습니다. 적절한 입력 유효성 검증 및 매개 변수화 쿼리 사용이 필수적입니다.

** 5. 속도 제한 및 무차별 인력 보호 우회
`whenloaded ()`는 단일 쿼리 내에서 여러 개의 중첩 된 데이터가 가져올 수 있으므로 공격자는이를 악용하여 기존 속도 제한을 우회 할 수 있습니다. 예를 들어, 많은 데이터 페치 또는 돌연변이를 유발하는 단일 복잡한 쿼리를 보낼 수 있으며, 요청 당 한계를 유발하지 않고 무차별 힘 또는 열거 공격을 효과적으로 수행 할 수 있습니다 [4] [7]. 요금 제한 전략은 쿼리 복잡성과 중첩 작업을 고려해야합니다.

** 6. 스키마 내성 및 툴링으로 인한 공격 표면 증가
`whenloaded ()`의 사용은 종종 여러 중첩 관계가있는 복잡한 스키마를 반영합니다. 공격자는 GraphQL introspection 및 GraphIQL과 같은 도구를 사용하여 이러한 관계를 발견하고 의도하지 않은 데이터에 액세스하기 위해`whenloaded ()`를 이용하는 크래프트 쿼리를 발견 할 수 있습니다 [1] [8]. 생산에 대한 내성을 비활성화하거나 승인 된 사용자로 제한하면 이러한 위험을 줄일 수 있습니다.

요약

`whenloaded ()`를 사용할 때의 주요 보안 함정은 GraphQL에서 다음과 같습니다.

- 모든 중첩 데이터 로딩 경로에서 일관된 승인을 시행하지 못합니다.
- DOS를 유발하는 지나치게 복잡하거나 깊은 쿼리를 허용합니다.
- 중첩 된 필드를 통해 민감한 데이터를 노출시킵니다.
- 주입 공격으로 이어지는 입력 검증 불충분.
- 복잡한 중첩 쿼리로 인한 속도 제한을 우회합니다.
- 스키마 내성 및 툴링으로 인한 노출 증가.

완화에는 모든 Resolver의 엄격한 승인 검사, 쿼리 복잡성 및 깊이 제한, 엄격한 입력 검증, 신중한 스키마 설계, 생산 내성 비활성화 및 GraphQL Query 구조에 대한 포괄적 인 속도 제한이 포함됩니다 [3] [4] [5] [6] [6].

인용 :
[1] https://portswigger.net/web-security/graphql
[2] https://www.imperva.com/blog/graphql-vulnerabilities-common-attacks/
[3] https://tyk.io/blog/graphql-security-7-common-vulnerabilities-and-to-mitigate-the-risks/
[4] https://www.brightsec.com/blog/graphql-security/
[5] https://blog.convisoappsec.com/en/security-in-graphql/
[6] https://wundergraph.com/blog/the_complete_graphql_security_guide_fixing_the_13_mest_common_graphql_vulnerabilities_to_make_your_api_production_ready
[7] https://beaglesecurity.com/blog/article/graphql-attacks-vulnerabilities.html
[8] https://www.fastly.com/blog/exploring-theecurity-implications-of-graphql