aboutsummaryrefslogtreecommitdiffhomepage
path: root/ldd
diff options
context:
space:
mode:
authorOphestra Umiker <cat@ophivana.moe>2024-10-17 15:37:27 +0900
committerOphestra Umiker <cat@ophivana.moe>2024-10-17 15:37:27 +0900
commit73a698c7cb551e2a372bf9c296862cc5e3fca6e9 (patch)
treefa2f021d32fae114d8586ee36496f28f8456546d /ldd
parent57c1b3eda6f48186ad029ed68b8b1920ea1ae2f3 (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.go31
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))
}