diff options
| author | Ophestra Umiker <cat@ophivana.moe> | 2024-10-17 15:37:27 +0900 |
|---|---|---|
| committer | Ophestra Umiker <cat@ophivana.moe> | 2024-10-17 15:37:27 +0900 |
| commit | 73a698c7cb551e2a372bf9c296862cc5e3fca6e9 (patch) | |
| tree | fa2f021d32fae114d8586ee36496f28f8456546d /ldd | |
| parent | 57c1b3eda6f48186ad029ed68b8b1920ea1ae2f3 (diff) | |
ldd: run ldd with read-only filesystem and unshared net
This is only called on trusted programs, however extra hardening is never a bad idea.
Signed-off-by: Ophestra Umiker <cat@ophivana.moe>
Diffstat (limited to 'ldd')
| -rw-r--r-- | ldd/exec.go | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/ldd/exec.go b/ldd/exec.go index d6a2af58..92b10549 100644 --- a/ldd/exec.go +++ b/ldd/exec.go @@ -5,14 +5,37 @@ import ( "os" "os/exec" "strings" + + "git.ophivana.moe/cat/fortify/helper" + "git.ophivana.moe/cat/fortify/helper/bwrap" ) func Exec(p string) ([]*Entry, error) { - t := exec.Command("ldd", p) - t.Stdout, t.Stderr = new(strings.Builder), os.Stderr - if err := t.Run(); err != nil { + var ( + h helper.Helper + cmd *exec.Cmd + ) + + if b, err := helper.NewBwrap((&bwrap.Config{ + Hostname: "fortify-ldd", + Chdir: "/", + NewSession: true, + DieWithParent: true, + }).Bind("/", "/").DevTmpfs("/dev"), + nil, "ldd", func(_, _ int) []string { return []string{p} }); err != nil { + return nil, err + } else { + cmd = b.Unwrap() + h = b + } + + cmd.Stdout, cmd.Stderr = new(strings.Builder), os.Stderr + if err := h.Start(); err != nil { + return nil, err + } + if err := h.Wait(); err != nil { return nil, err } - return Parse(t.Stdout.(fmt.Stringer)) + return Parse(cmd.Stdout.(fmt.Stringer)) } |
