Skip to content

Commit 056ce7c

Browse files
authored
Merge branch 'main' into add-upx-support
2 parents 21665ed + ca78f0f commit 056ce7c

28 files changed

+47602
-23875
lines changed

README.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@ malcontent has 3 modes of operation:
3535

3636
malcontent is at its best analyzing programs that run on Linux. Still, it also performs admirably for programs designed for other UNIX platforms such as macOS and, to a lesser extent, Windows.
3737

38+
## ⚠️ Malware Disclaimer ⚠️
39+
40+
Due to how malcontent operates, other malware scanners can detect malcontent as malicious.
41+
42+
Programs that leverage Yara rules will often see other programs that also use Yara rules as malicious due to the strings looking for problematic behavior(s).
43+
44+
For example, Elastic's agent has historically detected malcontent because of this: https://github.com/chainguard-dev/malcontent/issues/78*.
45+
46+
> \*Additional scanner findings can be seen in [this](https://www.virustotal.com/gui/file/b6f90aa5b9e7f3a5729a82f3ea35f96439691e150e0558c577a8541d3a187ba4/detection) VirusTotal scan.
47+
3848
## Features
3949

4050
* 14,500+ [YARA](YARA) detection rules

pkg/render/markdown.go

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -73,22 +73,6 @@ func (r Markdown) Full(ctx context.Context, rep *malcontent.Report) error {
7373
}
7474

7575
for modified := rep.Diff.Modified.Oldest(); modified != nil; modified = modified.Next() {
76-
var title string
77-
if modified.Value.PreviousRelPath != "" && modified.Value.PreviousRelPathScore >= 0.9 {
78-
title = fmt.Sprintf("## Moved: %s -> %s (similarity: %0.2f)", modified.Value.PreviousPath, modified.Value.Path, modified.Value.PreviousRelPathScore)
79-
} else {
80-
title = fmt.Sprintf("## Changed: %s", modified.Value.Path)
81-
}
82-
if modified.Value.RiskScore != modified.Value.PreviousRiskScore {
83-
title = fmt.Sprintf("%s [%s → %s]",
84-
title,
85-
mdRisk(modified.Value.PreviousRiskScore, modified.Value.PreviousRiskLevel),
86-
mdRisk(modified.Value.RiskScore, modified.Value.RiskLevel))
87-
}
88-
89-
if len(modified.Value.Behaviors) > 0 {
90-
fmt.Fprint(r.w, title+"\n\n")
91-
}
9276
added := 0
9377
removed := 0
9478
noDiff := 0
@@ -104,6 +88,29 @@ func (r Markdown) Full(ctx context.Context, rep *malcontent.Report) error {
10488
}
10589
}
10690

91+
if added == 0 && removed == 0 {
92+
continue
93+
}
94+
95+
var title string
96+
switch {
97+
case modified.Value.PreviousRelPath != "" && modified.Value.PreviousRelPathScore >= 0.9:
98+
title = fmt.Sprintf("## Moved: %s -> %s (similarity: %0.2f)", modified.Value.PreviousPath, modified.Value.Path, modified.Value.PreviousRelPathScore)
99+
default:
100+
title = fmt.Sprintf("## Changed (%d added, %d removed): %s", added, removed, modified.Value.Path)
101+
}
102+
103+
if modified.Value.RiskScore != modified.Value.PreviousRiskScore {
104+
title = fmt.Sprintf("%s [%s → %s]",
105+
title,
106+
mdRisk(modified.Value.PreviousRiskScore, modified.Value.PreviousRiskLevel),
107+
mdRisk(modified.Value.RiskScore, modified.Value.RiskLevel))
108+
}
109+
110+
if len(modified.Value.Behaviors) > 0 {
111+
fmt.Fprint(r.w, title+"\n\n")
112+
}
113+
107114
// We split the added/removed up in Markdown to address readability feedback. Unfortunately,
108115
// this means we hide "existing" behaviors, which causes context to suffer. We should evaluate an
109116
// improved rendering, similar to the "terminal" refresh, that includes everything.
@@ -140,17 +147,7 @@ func (r Markdown) Full(ctx context.Context, rep *malcontent.Report) error {
140147
}
141148

142149
if noDiff > 0 {
143-
count = noDiff
144-
noun := "behavior"
145-
qual = "consistent"
146-
if count > 1 {
147-
noun = "behaviors"
148-
}
149-
markdownTable(ctx, modified.Value, r.w, tableConfig{
150-
Title: fmt.Sprintf("### %d %s %s", count, qual, noun),
151-
SkipAdded: true,
152-
SkipRemoved: true,
153-
})
150+
continue
154151
}
155152
}
156153
return nil

pkg/render/simple.go

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,23 @@ func (r Simple) Full(_ context.Context, rep *malcontent.Report) error {
8383
}
8484
}
8585

86+
count := func(bs []*malcontent.Behavior) (int, int) {
87+
var added, removed int
88+
for _, b := range bs {
89+
if b.DiffAdded {
90+
added++
91+
}
92+
if b.DiffRemoved {
93+
removed++
94+
}
95+
}
96+
97+
return added, removed
98+
}
99+
86100
for modified := rep.Diff.Modified.Oldest(); modified != nil; modified = modified.Next() {
87101
if modified.Value.PreviousRelPath != "" && modified.Value.PreviousRelPathScore >= 0.9 {
88102
fmt.Fprintf(r.w, ">>> moved: %s -> %s (score: %f)\n", modified.Value.PreviousPath, modified.Value.Path, modified.Value.PreviousRelPathScore)
89-
} else {
90-
fmt.Fprintf(r.w, "*** changed: %s\n", modified.Value.Path)
91103
}
92104

93105
var bs []*malcontent.Behavior
@@ -97,8 +109,14 @@ func (r Simple) Full(_ context.Context, rep *malcontent.Report) error {
97109
return bs[i].ID < bs[j].ID
98110
})
99111

100-
for i := range bs {
101-
b := bs[i]
112+
added, removed := count(bs)
113+
if added == 0 && removed == 0 {
114+
continue
115+
}
116+
117+
fmt.Fprintf(r.w, "*** changed (%d added, %d removed): %s\n", added, removed, modified.Value.Path)
118+
119+
for _, b := range bs {
102120
if b.DiffRemoved {
103121
fmt.Fprintf(r.w, "-%s\n", b.ID)
104122
continue
@@ -107,7 +125,7 @@ func (r Simple) Full(_ context.Context, rep *malcontent.Report) error {
107125
fmt.Fprintf(r.w, "+%s\n", b.ID)
108126
}
109127
if !b.DiffRemoved && !b.DiffAdded {
110-
fmt.Fprintf(r.w, "%s\n", b.ID)
128+
continue
111129
}
112130
}
113131
}

pkg/render/tea_style.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,6 @@ var (
6060

6161
diffRemovedStyle = lipgloss.NewStyle().
6262
Foreground(lipgloss.Color("196"))
63-
64-
diffUnchangedStyle = lipgloss.NewStyle().
65-
Foreground(lipgloss.Color("69"))
6663
)
6764

6865
// cleanAndWrapEvidence handles evidence strings, including those with escape sequences.
@@ -135,6 +132,7 @@ func renderFileSummaryTea(_ context.Context, fr *malcontent.FileReport, w io.Wri
135132
previousNsRiskScore := map[string]int{}
136133
diffMode := false
137134

135+
var added, removed int
138136
for _, b := range fr.Behaviors {
139137
ns, _ := splitRuleID(b.ID)
140138
if b.DiffAdded || b.DiffRemoved {
@@ -147,6 +145,13 @@ func renderFileSummaryTea(_ context.Context, fr *malcontent.FileReport, w io.Wri
147145
if !b.DiffRemoved && b.RiskScore > nsRiskScore[ns] {
148146
nsRiskScore[ns] = b.RiskScore
149147
}
148+
149+
if b.DiffAdded {
150+
added++
151+
}
152+
if b.DiffRemoved {
153+
removed++
154+
}
150155
}
151156

152157
// Sort namespaces
@@ -176,7 +181,12 @@ func renderFileSummaryTea(_ context.Context, fr *malcontent.FileReport, w io.Wri
176181
riskBadge,
177182
)
178183

184+
if added == 0 && removed == 0 {
185+
return
186+
}
187+
179188
if diffMode {
189+
rc.Title = fmt.Sprintf("Changed (%d added, %d removed): %s", added, removed, fr.Path)
180190
header = lipgloss.JoinHorizontal(
181191
lipgloss.Center,
182192
pathStyle.Render(rc.Title),
@@ -245,8 +255,7 @@ func renderFileSummaryTea(_ context.Context, fr *malcontent.FileReport, w io.Wri
245255
baseStyle = diffRemovedStyle
246256
e = ""
247257
default:
248-
baseStyle = diffUnchangedStyle
249-
e = ""
258+
continue
250259
}
251260
}
252261

pkg/render/terminal.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,7 @@ func (r Terminal) Full(ctx context.Context, rep *malcontent.Report) error {
116116
var title string
117117
if modified.Value.PreviousRelPath != "" && modified.Value.PreviousRelPathScore >= 0.9 {
118118
title = fmt.Sprintf("Moved: %s -> %s (score: %f)", modified.Value.PreviousPath, modified.Value.Path, modified.Value.PreviousRelPathScore)
119-
} else {
120-
title = fmt.Sprintf("Changed: %s", modified.Value.Path)
121119
}
122-
123120
if modified.Value.RiskScore != modified.Value.PreviousRiskScore {
124121
title = fmt.Sprintf("%s %s", title,
125122
darkBrackets(fmt.Sprintf("%s %s %s", riskInColor(modified.Value.PreviousRiskLevel), color.HiWhiteString("→"), riskInColor(modified.Value.RiskLevel))))
@@ -220,7 +217,6 @@ func ansiLineLength(s string) int {
220217
}
221218

222219
func renderFileSummary(_ context.Context, fr *malcontent.FileReport, w io.Writer, rc tableConfig) {
223-
fmt.Fprintf(w, "├─ %s %s\n", riskEmoji(fr.RiskScore), rc.Title)
224220
width := suggestedWidth()
225221

226222
byNamespace := map[string][]*malcontent.Behavior{}
@@ -232,6 +228,7 @@ func renderFileSummary(_ context.Context, fr *malcontent.FileReport, w io.Writer
232228
return
233229
}
234230

231+
var added, removed int
235232
for _, b := range fr.Behaviors {
236233
ns, _ := splitRuleID(b.ID)
237234

@@ -247,15 +244,28 @@ func renderFileSummary(_ context.Context, fr *malcontent.FileReport, w io.Writer
247244

248245
byNamespace[ns] = append(byNamespace[ns], b)
249246

247+
if b.DiffAdded {
248+
added++
249+
}
250250
if b.DiffRemoved {
251-
continue
251+
removed++
252252
}
253253

254254
if b.RiskScore > nsRiskScore[ns] {
255255
nsRiskScore[ns] = b.RiskScore
256256
}
257+
258+
if added == 0 && removed == 0 {
259+
continue
260+
}
261+
262+
if diffMode {
263+
rc.Title = fmt.Sprintf("Changed (%d added, %d removed): %s", added, removed, fr.Path)
264+
}
257265
}
258266

267+
fmt.Fprintf(w, "├─ %s %s\n", riskEmoji(fr.RiskScore), rc.Title)
268+
259269
nss := []string{}
260270
for ns := range byNamespace {
261271
nss = append(nss, ns)
@@ -281,10 +291,10 @@ func renderFileSummary(_ context.Context, fr *malcontent.FileReport, w io.Writer
281291
diff = color.HiGreenString("+")
282292
}
283293

284-
if riskLevel < previousRiskLevel {
294+
if riskScore > previousNsRiskScore[ns] {
285295
nsIcon = color.HiYellowString("▲")
286296
}
287-
if riskLevel > previousRiskLevel {
297+
if riskScore < previousNsRiskScore[ns] {
288298
nsIcon = color.HiGreenString("▼")
289299
}
290300
if riskLevel == "NONE" {
@@ -331,8 +341,7 @@ func renderFileSummary(_ context.Context, fr *malcontent.FileReport, w io.Writer
331341
}
332342

333343
if !b.DiffAdded && !b.DiffRemoved {
334-
pc = color.New(color.FgHiCyan)
335-
e = ""
344+
continue
336345
}
337346

338347
content = fmt.Sprintf("%s%s%s %s %s", diff, indent, bullet, rest, desc)

tests/javascript/2024.lottie-player/lottie-player.min.js.mdiff

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
## Changed: javascript/2024.lottie-player/lottie-player.min.js [🟡 MEDIUM → 😈 CRITICAL]
1+
## Changed (49 added, 2 removed): javascript/2024.lottie-player/lottie-player.min.js [🟡 MEDIUM → 😈 CRITICAL]
22

33
### 49 new behaviors
44

@@ -61,14 +61,3 @@
6161
| -MEDIUM | [exec/remote_commands/code_eval](https://github.com/chainguard-dev/malcontent/blob/main/rules/exec/remote_commands/code_eval.yara#eval) | evaluate code dynamically using eval() | [eval("](https://github.com/search?q=eval%28%22&type=code) |
6262
| -MEDIUM | [os/time/clock_sleep](https://github.com/chainguard-dev/malcontent/blob/main/rules/os/time/clock-sleep.yara#setInterval) | uses setInterval to wait | [setInterval(](https://github.com/search?q=setInterval%28&type=code) |
6363

64-
### 6 consistent behaviors
65-
66-
| RISK | KEY | DESCRIPTION | EVIDENCE |
67-
|--|--|--|--|
68-
| MEDIUM | [net/download](https://github.com/chainguard-dev/malcontent/blob/main/rules/net/download/download.yara#download) | download files | [Downloads](https://github.com/search?q=Downloads&type=code)<br>[downloads-view](https://github.com/search?q=downloads-view&type=code)<br>[mobile-download-links](https://github.com/search?q=mobile-download-links&type=code) |
69-
| LOW | [data/encoding/json_decode](https://github.com/chainguard-dev/malcontent/blob/main/rules/data/encoding/json-decode.yara#jsondecode) | Decodes JSON messages | [JSON.parse](https://github.com/search?q=JSON.parse&type=code) |
70-
| LOW | [data/encoding/json_encode](https://github.com/chainguard-dev/malcontent/blob/main/rules/data/encoding/json-encode.yara#JSONEncode) | encodes JSON | [JSON.stringify](https://github.com/search?q=JSON.stringify&type=code) |
71-
| LOW | [exec/plugin](https://github.com/chainguard-dev/malcontent/blob/main/rules/exec/plugin/plugin.yara#plugin) | references a 'plugin' | [plugin_relativeTime](https://github.com/search?q=plugin_relativeTime&type=code)<br>[plugin_updateLocale](https://github.com/search?q=plugin_updateLocale&type=code)<br>[plugins](https://github.com/search?q=plugins&type=code) |
72-
| LOW | [net/url/embedded](https://github.com/chainguard-dev/malcontent/blob/main/rules/net/url/embedded.yara#https_url) | contains embedded HTTPS URLs | [https://abitype.dev](https://abitype.dev)<br>[https://andromeda-explorer.metis.io/api](https://andromeda-explorer.metis.io/api)<br>[https://andromeda.metis.io/?owner=1088](https://andromeda.metis.io/?owner=1088)<br>[https://api-era.zksync.network/api](https://api-era.zksync.network/api)<br>[https://api-moonbeam.moonscan.io/api](https://api-moonbeam.moonscan.io/api)<br>[https://api-moonriver.moonscan.io/api](https://api-moonriver.moonscan.io/api)<br>[https://api-optimistic.etherscan.io/api](https://api-optimistic.etherscan.io/api)<br>[https://api-zkevm.polygonscan.com/api](https://api-zkevm.polygonscan.com/api)<br>[https://api.arbiscan.io/api](https://api.arbiscan.io/api)<br>[https://api.avax.network/ext/bc/C/rpc](https://api.avax.network/ext/bc/C/rpc)<br>[https://api.basescan.org/api](https://api.basescan.org/api)<br>[https://api.blastscan.io/api](https://api.blastscan.io/api)<br>[https://api.bscscan.com/api](https://api.bscscan.com/api)<br>[https://api.celoscan.io/api](https://api.celoscan.io/api)<br>[https://api.etherscan.io/api](https://api.etherscan.io/api)<br>[https://api.ftmscan.com/api](https://api.ftmscan.com/api)<br>[https://api.gnosisscan.io/api](https://api.gnosisscan.io/api)<br>[https://api.lineascan.build/api](https://api.lineascan.build/api)<br>[https://api.mantlescan.xyz/api](https://api.mantlescan.xyz/api)<br>[https://api.polygonscan.com/api](https://api.polygonscan.com/api)<br>[https://api.roninchain.com/rpc](https://api.roninchain.com/rpc)<br>[https://api.routescan.io/v2/network/mainnet/evm/43114/etherscan/api](https://api.routescan.io/v2/network/mainnet/evm/43114/etherscan/api)<br>[https://api.scan.pulsechain.com/api](https://api.scan.pulsechain.com/api)<br>[https://api.scrollscan.com/api](https://api.scrollscan.com/api)<br>[https://api.snowtrace.io](https://api.snowtrace.io)<br>[https://api.wallet.coinbase.com/rpc/v2/desktop/chrome](https://api.wallet.coinbase.com/rpc/v2/desktop/chrome)<br>[https://api.web3modal.org](https://api.web3modal.org)<br>[https://app.roninchain.com](https://app.roninchain.com)<br>[https://arb1.arbitrum.io/rpc](https://arb1.arbitrum.io/rpc)<br>[https://arbiscan.io](https://arbiscan.io)<br>[https://arweave.net](https://arweave.net)<br>[https://aurorascan.dev/api](https://aurorascan.dev/api)<br>[https://avatar.vercel.sh/andrew.svg?size=50](https://avatar.vercel.sh/andrew.svg?size=50)<br>[https://basescan.org](https://basescan.org)<br>[https://blastscan.io](https://blastscan.io)<br>[https://block-explorer-api.mainnet.zksync.io/api](https://block-explorer-api.mainnet.zksync.io/api)<br>[https://bobascan.com](https://bobascan.com)<br>[https://bscscan.com](https://bscscan.com)<br>[https://build.onbeam.com/rpc](https://build.onbeam.com/rpc)<br>[https://celoscan.io](https://celoscan.io)<br>[https://cloudflare-eth.com](https://cloudflare-eth.com)<br>[https://docs.cloud.coinbase.com/wallet-sdk/docs/errors](https://docs.cloud.coinbase.com/wallet-sdk/docs/errors)<br>[https://docs.soliditylang.org/en/latest/cheatsheet.html](https://docs.soliditylang.org/en/latest/cheatsheet.html)<br>[https://echo.walletconnect.com/](https://echo.walletconnect.com/)<br>[https://era.zksync.network/](https://era.zksync.network/)<br>[https://ethereum.org/en/developers/docs/networks/](https://ethereum.org/en/developers/docs/networks/)<br>[https://etherscan.io](https://etherscan.io)<br>[https://evm.cronos.org](https://evm.cronos.org)<br>[https://evm.kava.io](https://evm.kava.io)<br>[https://exchainrpc.okex.org](https://exchainrpc.okex.org)<br>[https://explorer-api.cronos.org/mainnet/api](https://explorer-api.cronos.org/mainnet/api)<br>[https://explorer-api.walletconnect.com](https://explorer-api.walletconnect.com)<br>[https://explorer.cronos.org](https://explorer.cronos.org)<br>[https://explorer.dogechain.dog/api](https://explorer.dogechain.dog/api)<br>[https://explorer.fuse.io/api](https://explorer.fuse.io/api)<br>[https://explorer.harmony.one](https://explorer.harmony.one)<br>[https://explorer.kcc.io](https://explorer.kcc.io)<br>[https://explorer.metis.io](https://explorer.metis.io)<br>[https://explorer.walletconnect.com/?type=wallet](https://explorer.walletconnect.com/?type=wallet)<br>[https://explorer.zksync.io/](https://explorer.zksync.io/)<br>[https://fonts.googleapis.com/css2?family=Inter](https://fonts.googleapis.com/css2?family=Inter)<br>[https://forno.celo.org](https://forno.celo.org)<br>[https://ftmscan.com](https://ftmscan.com)<br>[https://gnosisscan.io](https://gnosisscan.io)<br>[https://go.cb-w.com/dapp?cb_url=](https://go.cb-w.com/dapp?cb_url=)<br>[https://go.cb-w.com/walletlink](https://go.cb-w.com/walletlink)<br>[https://kavascan.com/api](https://kavascan.com/api)<br>[https://kcc-rpc.com](https://kcc-rpc.com)<br>[https://keys.coinbase.com/connect](https://keys.coinbase.com/connect)<br>[https://lineascan.build](https://lineascan.build)<br>[https://links.ethers.org/v5-errors-](https://links.ethers.org/v5-errors-)<br>[https://mainnet.aurora.dev](https://mainnet.aurora.dev)<br>[https://mainnet.base.org](https://mainnet.base.org)<br>[https://mainnet.boba.network](https://mainnet.boba.network)<br>[https://mainnet.era.zksync.io](https://mainnet.era.zksync.io)<br>[https://mainnet.optimism.io](https://mainnet.optimism.io)<br>[https://mantlescan.xyz/](https://mantlescan.xyz/)<br>[https://moonbeam.public.blastapi.io](https://moonbeam.public.blastapi.io)<br>[https://moonriver.moonscan.io](https://moonriver.moonscan.io)<br>[https://moonriver.public.blastapi.io](https://moonriver.public.blastapi.io)<br>[https://moonscan.io](https://moonscan.io)<br>[https://npms.io/search?q=ponyfill.](https://npms.io/search?q=ponyfill.)<br>[https://openchain.xyz/signatures?query=](https://openchain.xyz/signatures?query=)<br>[https://optimistic.etherscan.io](https://optimistic.etherscan.io)<br>[https://polygon-rpc.com](https://polygon-rpc.com)<br>[https://polygonscan.com](https://polygonscan.com)<br>[https://pulse.walletconnect.org](https://pulse.walletconnect.org)<br>[https://reactjs.org/docs/error-decoder.html?invariant=](https://reactjs.org/docs/error-decoder.html?invariant=)<br>[https://rpc.ankr.com/bsc](https://rpc.ankr.com/bsc)<br>[https://rpc.ankr.com/fantom](https://rpc.ankr.com/fantom)<br>[https://rpc.ankr.com/harmony](https://rpc.ankr.com/harmony)<br>[https://rpc.blast.io](https://rpc.blast.io)<br>[https://rpc.dogechain.dog](https://rpc.dogechain.dog)<br>[https://rpc.fuse.io](https://rpc.fuse.io)<br>[https://rpc.gnosischain.com](https://rpc.gnosischain.com)<br>[https://rpc.linea.build](https://rpc.linea.build)<br>[https://rpc.mantle.xyz](https://rpc.mantle.xyz)<br>[https://rpc.pulsechain.com](https://rpc.pulsechain.com)<br>[https://rpc.scroll.io](https://rpc.scroll.io)<br>[https://rpc.walletconnect.com/v1/?chainId=eip155](https://rpc.walletconnect.com/v1/?chainId=eip155)<br>[https://rpc.walletconnect.org](https://rpc.walletconnect.org)<br>[https://safe-client.safe.global](https://safe-client.safe.global)<br>[https://scan.pulsechain.com](https://scan.pulsechain.com)<br>[https://scrollscan.com](https://scrollscan.com)<br>[https://secure.walletconnect.org/sdk](https://secure.walletconnect.org/sdk)<br>[https://snowtrace.io](https://snowtrace.io)<br>[https://subnets.avax.network/beam](https://subnets.avax.network/beam)<br>[https://verify.walletconnect.com](https://verify.walletconnect.com)<br>[https://verify.walletconnect.org](https://verify.walletconnect.org)<br>[https://wagmi.sh/core](https://wagmi.sh/core)<br>[https://wagmi.sh/react](https://wagmi.sh/react)<br>[https://walletconnect.com/explorer?type=wallet](https://walletconnect.com/explorer?type=wallet)<br>[https://walletconnect.com/faq](https://walletconnect.com/faq)<br>[https://www.jsdelivr.com/using-sri-with-dynamic-files](https://www.jsdelivr.com/using-sri-with-dynamic-files)<br>[https://www.oklink.com/okc](https://www.oklink.com/okc)<br>[https://www.walletlink.org](https://www.walletlink.org)<br>[https://zkevm-rpc.com](https://zkevm-rpc.com)<br>[https://zkevm.polygonscan.com](https://zkevm.polygonscan.com) |
73-
| LOW | [net/url/parse](https://github.com/chainguard-dev/malcontent/blob/main/rules/net/url/parse.yara#url_handle) | Handles URL strings | [new URL](https://github.com/search?q=new+URL&type=code) |
74-

tests/linux/2021.XMR-Stak/1b1a56.elf.simple

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# linux/2021.XMR-Stak/1b1a56.elf: critical
22
3P/TTC-CERT/kittipongk_cryptominer_xmr: high
33
3P/elastic/cryptominer_stak: critical
4+
3P/sekoia/miner_lin_xmrig: critical
45
c2/addr/http_dynamic: medium
56
c2/addr/ip: medium
67
c2/addr/url: low

tests/linux/2022.bpfdoor/bpfdoor_1.simple

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# linux/2022.bpfdoor/bpfdoor_1: critical
22
3P/elastic/bpfdoor: critical
3+
3P/sekoia/backdoor_lin_bpfdoor: critical
34
3P/sig_base/redmenshen_bpfdoor: critical
45
data/random/insecure: low
56
exec/program: medium

0 commit comments

Comments
 (0)