EMQX开源版如何禁用Swagger UI,不暴露/api-docs/swagger.json

被当地网信办扫描到漏洞,发文整改。EMQX 系统存在 Swagger 未授权访问漏洞,经测试,情况属实。综合利用漏洞,允许攻击者远程无需身份验证即可访问系统敏感信息页面,构成信息泄露和运行安全风险。

代码中没有将 swagger 关闭的配置提供出来,我改了下 emqx_dashboard.erl 的源码(最新的master分支),BaseMinirest 变量中添加 swagger_support => false ,重新编译启动后即可无法访问

image

可以将 emqx 目录下的 lib/emqx_dashboard-5.0.31/ebin/emqx_dashboard.beam 文件备份后替换为下面文件,而后重新启动 emqx
emqx_dashboard.tar.gz (12.4 KB)

注意:
1、文件编译环境为 erlang: "25.3.2-2"
2、如果升级 emqx 版本,此文件可能会失效

当然,还是希望官方能将此项配置开放出来

目前不支持通过 配置/ui/api 等方式关闭 swagger 文档页面。
除了 @jostar 提到的重新编译部署的方式以外,也可通过 nginx 或其他反代/负载均衡器
/api-docs 路径添加路由,以返回 404 或其他页面达到禁止访问的目的。

nginx conf example:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen 28083;
        location / {
            proxy_pass http://127.0.0.1:18083;
        }
        location /api-docs {
            return 404;
        }
    }
    # server {
    #     listen 28084 ssl;
    #     ssl_certificate [your_cert_file_path];
    #     ssl_certificate_key [your_key_file_path];
    #     location / {
    #         proxy_pass https://127.0.0.1:18084;
    #     }
    #     location /api-docs {
    #         return 404;
    #     }
    # }
}
1 个赞

目录下没有 emqx_dashboard.beam文件

EMQX版本和部署方式提供一下

5.0.22,部署方式的话不太清楚

你这不是版本号,进入这个目录 /usr/lib/emqx/releases,有一个数字组成的文件,类似这种
image

这个拦截不了,不生效

v5.6.0 版本支持在配置中关闭 swagger 页面。

配置项

dashboard.swagger_support=false

https://www.emqx.io/docs/zh/v5.6.0/hocon/#V-dashboard-S-dashboard-swagger_support

那还得升级到5.6版本吗,现在生产环境用的5.3.2 怎么搞啊

我们也是被通报的这个问题 :rofl:

生产环境可以使用滚动升级。
https://www.emqx.io/docs/zh/latest/deploy/rolling-upgrades.html

另外,反代拦截 /api-docs 页面是验证过可用的。
是不是你的 nginx 配置没写对?还是实际去访问了 EMQX 的地址,不是通过反代访问的?

直接访问的emqx地址,不是反向的

还有个问题,系统是centos7.4 的,最高版本只能安装到5.3.2,再高点版本,直接安装失败了,报很多错误

访问反代地址看看呢?
反代拦截只影响通过反向代理进来的外部请求。

el7 安装失败的问题,单独开个新帖子发下报错信息吧。

好的,我试试反代