脚本之家,脚本语言编程技术及教程分享平台!
分类导航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|shell|

服务器之家 - 脚本之家 - Golang - node-exporter被检测出来pprof调试信息泄露漏洞问题

node-exporter被检测出来pprof调试信息泄露漏洞问题

2024-04-15 11:29Meepoljd   Golang

这篇文章主要介绍了node-exporter被检测出来pprof调试信息泄露漏洞问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

说在前面

惯例开篇吐槽,有些仔仔习惯搞点自研的安全扫描工具,然后加点DIY元素,他也不管扫的准不准,就要给你报个高中危的漏洞,然后就要去修复,这次遇到个其他的就是node-exporter默认引入了pprof做一些性能指标的采集,然后仔仔的漏洞扫描工具就给你扫出来这么一条奇葩漏洞:

node-exporter被检测出来pprof调试信息泄露漏洞问题

先不说处理方法,去github看了一圈,确实有人提了issue:

node-exporter被检测出来pprof调试信息泄露漏洞问题

看到是中文我就大概知道这些仔仔可能是从同一个货源采购的安全扫描工具,对于这个问题官方在另一个issue中提了一下:

node-exporter[issues]-1911

node-exporter被检测出来pprof调试信息泄露漏洞问题

大概意思是开发者并没有发现pprof会泄漏啥信息,issue提出者使用的是gosec工具做的静态安全扫描,可能产生很多编译期间的误报,然后社区达成一致的结论是和prometheus社区保持一致,转而使用codeql工具。

node-exporter被检测出来pprof调试信息泄露漏洞问题

解决方法

但是为了能过所谓的安全检查还是要处理这个事情,处理之前,打开http://{node-exporter-ip}:{port}/debug/pprof的访问链接会出现这样的内容;

node-exporter被检测出来pprof调试信息泄露漏洞问题

原因也很简单,就是因为在node-exporter.go中引用了pprof包,我们要做的就是把引用删除,重新编译:

import (
	"fmt"
	stdlog "log"
	"net/http"
	_ "net/http/pprof" // 删除这一行
	"os"
	"os/user"
	"runtime"
	"sort"

	"github.com/prometheus/common/promlog"
	"github.com/prometheus/common/promlog/flag"

	"github.com/go-kit/log"
	"github.com/go-kit/log/level"
	"github.com/prometheus/client_golang/prometheus"
	promcollectors "github.com/prometheus/client_golang/prometheus/collectors"
	"github.com/prometheus/client_golang/prometheus/promhttp"
	"github.com/prometheus/common/version"
	"github.com/prometheus/exporter-toolkit/web"
	"github.com/prometheus/exporter-toolkit/web/kingpinflag"
	"github.com/prometheus/node_exporter/collector"
	kingpin "gopkg.in/alecthomas/kingpin.v2"
)

node-exporter被检测出来pprof调试信息泄露漏洞问题

把二进制包替换掉原来的,然后重启一下,再访问/debug/pprof就会直接跳到Metrics主页了:

node-exporter被检测出来pprof调试信息泄露漏洞问题

结语

这种操作就是关闭了pprof性能指标的采集,适用于大部分版本的node-exporter,其他类似的go程序也可以这样进行操作。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/Meepoljd/article/details/131120377

延伸 · 阅读

精彩推荐
  • GolangGo语言中rune方法使用详解

    Go语言中rune方法使用详解

    本文主要介绍了Go语言中rune方法使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小...

    胡桃木子4502023-03-19
  • GolangGo语言实现的最简单数独解法

    Go语言实现的最简单数独解法

    前面给大家介绍过使用javascript实现的简单的数独解法,小伙伴们都非常喜欢,今天我们再来分享一则go语言实现的简单的数独解法,有需要的小伙伴来参考...

    脚本之家3142020-04-24
  • GolangGolang Socket Server自定义协议的简单实现方案

    Golang Socket Server自定义协议的简单实现方案

    这篇文章主要介绍了Golang Socket Server自定义协议的简单实现方案,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    冷月醉雪6352021-03-04
  • Golanggo嵌套匿名结构体的初始化详解

    go嵌套匿名结构体的初始化详解

    这篇文章主要介绍了go嵌套匿名结构体的初始化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...

    darkalliance4882021-02-28
  • Golanggo日志库logrus的安装及快速使用

    go日志库logrus的安装及快速使用

    这篇文章主要为大家介绍了go日志库logrus的安装及快速使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...

    王者之峰12082022-08-04
  • Golang深度解密 Go 语言中的 sync.Pool

    深度解密 Go 语言中的 sync.Pool

    sync.Pool 是 sync 包下的一个组件,可以作为保存临时取还对象的一个“池子”。这篇文章主要介绍了深度解密 Go 语言中的sync.Pool,本文给大家介绍的非常详...

    Stefno4652020-06-09
  • Golanggolang利用unsafe操作未导出变量-Pointer使用详解

    golang利用unsafe操作未导出变量-Pointer使用详解

    这篇文章主要给大家介绍了关于golang利用unsafe操作未导出变量-Pointer使用的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面...

    豆瓣奶茶3442020-05-17
  • GolangGoLang nil与interface的空指针深入分析

    GoLang nil与interface的空指针深入分析

    Go语言中任何类型在未初始化时都对应一个零值:布尔类型是false,整型是0,字符串是"",而指针、函数、interface、slice、channel和map的零值都是nil...

    alwaysrun7052022-12-24