通过 API 在 LearnDash 中暴露敏感信息。未认证的访客可以浏览测验和测验问题,而无需注册关联课程。
任何人,即使是未认证的访客,都可以看到所有 LearnDash 测验和 LearnDash 测验问题。由于测验问题是公开的,它们无法用于验证学生的知识水平。
LearnDash 是一个适用于 WordPress 的学习管理系统插件。它支持两种不同类型的测验。较旧的测验类型称为 sfwd-quiz,依赖于关联的问题(sfwd-question)。较新的测验类型将测验及其问题存储为 ld-exam 文章。
LearnDash 有三个 REST API:/wp/v2/、/ldlms/v1/ 和 /ldlms/v2/(目前处于测试阶段)。所有 API(包括测试版 API)默认启用。/ldlms/v1/ 和 /ldlms/v2/ API 可以通过 learndash_rest_api_enabled 过滤器(参见 class-ld-rest-api.php)对特定文章类型禁用。
受影响版本的 LearnDash(<=4.10.2)向未认证的访客公开了所有测验和测验问题。访客可以通过 /wp/v2/ REST API 调用 sfwd-question 和 ld-exam 的端点来浏览(读取)所有问题。此 API 默认启用。
https://example.com/wp-json/wp/v2/sfwd-question
https://example.com/wp-json/wp/v2/ld-exam
访客还可以通过 /ldlms/v1/ API 调用 sfwd-quiz 端点来浏览(读取)所有测验。此 API 默认启用。
https://example.com/wp-json/ldlms/v1/sfwd-quiz
如果访客知道测验文章 ID(它只是一个递增的整数),也可以通过 /ldlms/v2/ API 访问测验。
可以使用 learndash_rest_api_enabled 过滤器禁用 /ldlms/v1/ 和 /ldlms/v2/ API,但这会引发新的数据泄露。如果管理员对任何文章类型禁用了 /ldlms/v1/ 和 /ldlms/v2/ API,LearnDash 会通过 /wp/v2/ API 向未认证访客公开所有可通过 REST API 访问的 LearnDash 内容,包括课程和主题。
LearnDash 4.10.2 于 2024-01-08 发布。它没有解决数据泄露问题,但使得禁用 /ldlms/v1/ 和 /ldlms/v2/ API 成为可能,而不会通过 /wp/v2/ API 泄露更多信息。
LearnDash 4.10.3 于 2024-01-31 发布,解决了这些漏洞。
learndash_rest_api_enabled 过滤器相关的问题。LearnDash 处理漏洞报告得当,并在 90 天负责任披露窗口内解决了这些漏洞。