Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package bettercap for openSUSE:Factory checked in at 2026-05-11 16:58:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/bettercap (Old) and /work/SRC/openSUSE:Factory/.bettercap.new.1966 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "bettercap" Mon May 11 16:58:20 2026 rev:7 rq:1352442 version:2.41.7 Changes: -------- --- /work/SRC/openSUSE:Factory/bettercap/bettercap.changes 2025-12-18 18:35:14.895181353 +0100 +++ /work/SRC/openSUSE:Factory/.bettercap.new.1966/bettercap.changes 2026-05-11 17:09:20.606418658 +0200 @@ -1,0 +2,19 @@ +Mon May 11 09:50:38 UTC 2026 - Martin Hauke <[email protected]> + +- Update to version 2.41.7: + Fixes + * Fixed mysql.server panic on crafted client handshake (remote + DoS). Fixes CVE-2026-8276 (boo#1264701). + * Fixed zerogod IPP chunked body panic via OOB uint64 allocation + (#1263). Fixes CVE-2026-8275 (boo#1264702). + * Close connection on panic recovery in the TCP acceptor. + * Fixed flags value (0x0c → 0xc0) in prefix option for ICMPv6 + router advertisement. + * Use only iwlist to detect supported channels (fixes #1243). + * Fixed dropped graph error. + * Fixed JS SBCB deserialization and JSSVCB key int64 typing. + * int64 conversion for otto backwards compatibility. + Improvements + * Enhanced PMKID validation and debug logging. + +------------------------------------------------------------------- Old: ---- bettercap-2.41.5.obscpio New: ---- bettercap-2.41.7.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ bettercap.spec ++++++ --- /var/tmp/diff_new_pack.NZeAuW/_old 2026-05-11 17:09:21.662462110 +0200 +++ /var/tmp/diff_new_pack.NZeAuW/_new 2026-05-11 17:09:21.666462274 +0200 @@ -1,8 +1,8 @@ # # spec file for package bettercap # -# Copyright (c) 2025 SUSE LLC and contributors -# Copyright (c) 2019-2025, Martin Hauke <[email protected]> +# Copyright (c) 2026 SUSE LLC and contributors +# Copyright (c) 2019-2026, Martin Hauke <[email protected]> # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,7 +18,7 @@ Name: bettercap -Version: 2.41.5 +Version: 2.41.7 Release: 0 Summary: Swiss army knife for network attacks and monitoring License: GPL-3.0-or-later ++++++ _service ++++++ --- /var/tmp/diff_new_pack.NZeAuW/_old 2026-05-11 17:09:21.698463591 +0200 +++ /var/tmp/diff_new_pack.NZeAuW/_new 2026-05-11 17:09:21.702463755 +0200 @@ -2,7 +2,7 @@ <service name="obs_scm" mode="manual"> <param name="url">https://github.com/bettercap/bettercap.git</param> <param name="scm">git</param> - <param name="revision">v2.41.5</param> + <param name="revision">v2.41.7</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> @@ -18,4 +18,3 @@ </service> </services> - ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.NZeAuW/_old 2026-05-11 17:09:21.722464578 +0200 +++ /var/tmp/diff_new_pack.NZeAuW/_new 2026-05-11 17:09:21.730464907 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/bettercap/bettercap.git</param> - <param name="changesrevision">e71140334ed0d309413512462b2c35c6f513b832</param></service></servicedata> + <param name="changesrevision">dfe56780bb342b6a6715c9557a2cefe1f13d805c</param></service></servicedata> (No newline at EOF) ++++++ bettercap-2.41.5.obscpio -> bettercap-2.41.7.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/.github/workflows/build-and-deploy.yml new/bettercap-2.41.7/.github/workflows/build-and-deploy.yml --- old/bettercap-2.41.5/.github/workflows/build-and-deploy.yml 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/.github/workflows/build-and-deploy.yml 2026-05-11 11:43:42.000000000 +0200 @@ -86,7 +86,7 @@ 7z a "bettercap_${{ matrix.os.name }}_${{ matrix.arch }}.zip" "${{ env.OUTPUT }}" "bettercap_${{ matrix.os.name }}_${{ matrix.arch }}.sha256" - name: Upload Artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: release-artifacts-${{ matrix.os.name }}-${{ matrix.arch }} path: | @@ -99,7 +99,7 @@ runs-on: ubuntu-latest steps: - name: Download Artifacts - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v8 with: pattern: release-artifacts-* merge-multiple: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/.github/workflows/build-and-push-docker.yml new/bettercap-2.41.7/.github/workflows/build-and-push-docker.yml --- old/bettercap-2.41.5/.github/workflows/build-and-push-docker.yml 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/.github/workflows/build-and-push-docker.yml 2026-05-11 11:43:42.000000000 +0200 @@ -14,16 +14,16 @@ uses: actions/checkout@v4 - name: Set up QEMU - uses: docker/setup-qemu-action@v3 + uses: docker/setup-qemu-action@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Docker Hub - uses: docker/login-action@v3 + uses: docker/login-action@v4 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Build and push - uses: docker/build-push-action@v6 + uses: docker/build-push-action@v7 with: platforms: linux/amd64,linux/arm64 push: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/Dockerfile.arm64 new/bettercap-2.41.7/Dockerfile.arm64 --- old/bettercap-2.41.5/Dockerfile.arm64 1970-01-01 01:00:00.000000000 +0100 +++ new/bettercap-2.41.7/Dockerfile.arm64 2026-05-11 11:43:42.000000000 +0200 @@ -0,0 +1,42 @@ +# syntax=docker/dockerfile:1 + +# build stage for cross-compiling for arm64 using native Go cross-compilation +FROM golang:1.24-bookworm AS builder + +# install cross-compilation toolchain and ARM64 libraries +RUN dpkg --add-architecture arm64 && \ + apt-get update && apt-get install -y --no-install-recommends \ + gcc-aarch64-linux-gnu \ + libc6-dev-arm64-cross \ + libpcap-dev:arm64 \ + libnetfilter-queue-dev:arm64 \ + libusb-1.0-0-dev:arm64 \ + libbluetooth-dev:arm64 \ + && rm -rf /var/lib/apt/lists/* + +WORKDIR /src + +# cache go modules (runs natively on x86_64 - fast!) +RUN go env -w GOCACHE=/go-cache +RUN go env -w GOMODCACHE=/gomod-cache + +COPY go.mod go.sum ./ +RUN --mount=type=cache,target=/gomod-cache go mod tidy +RUN --mount=type=cache,target=/gomod-cache go mod download + +# copy source code +COPY . . + +# cross-compile for ARM64 using native x86_64 Go compiler +ENV CC=aarch64-linux-gnu-gcc +ENV CGO_ENABLED=1 +ENV GOOS=linux +ENV GOARCH=arm64 +ENV PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig + +# build with cgo enabled for native library bindings +RUN --mount=type=cache,target=/gomod-cache --mount=type=cache,target=/go-cache make + +# output stage - minimal image containing only the binary +FROM scratch AS output +COPY --from=builder /src/bettercap /bettercap diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/Makefile new/bettercap-2.41.7/Makefile --- old/bettercap-2.41.5/Makefile 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/Makefile 2026-05-11 11:43:42.000000000 +0200 @@ -40,4 +40,13 @@ $(RM) $(TARGET) $(RM) -r build +build-arm64: clean + docker build -f Dockerfile.arm64 \ + --target=output \ + --output type=local,dest=. \ + . + +sync-arm64: + rsync -rvzc ./bettercap [email protected]:/home/pi/ + .PHONY: all build build_with_race_detector resources install docker test html_coverage benchmark fmt clean diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/core/banner.go new/bettercap-2.41.7/core/banner.go --- old/bettercap-2.41.5/core/banner.go 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/core/banner.go 2026-05-11 11:43:42.000000000 +0200 @@ -2,7 +2,7 @@ const ( Name = "bettercap" - Version = "2.41.5" + Version = "2.41.7" Author = "Simone 'evilsocket' Margaritelli" Website = "https://bettercap.org/" ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/modules/dns_proxy/dns_proxy_js_query.go new/bettercap-2.41.7/modules/dns_proxy/dns_proxy_js_query.go --- old/bettercap-2.41.5/modules/dns_proxy/dns_proxy_js_query.go 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/modules/dns_proxy/dns_proxy_js_query.go 2026-05-11 11:43:42.000000000 +0200 @@ -170,6 +170,14 @@ return uint64(0) } +func uint8ArrayToInt64Array(arr []uint8) []int64 { + vArr := make([]int64, 0, len(arr)) + for _, item := range arr { + vArr = append(vArr, int64(item)) + } + return vArr +} + func uint16ArrayToInt64Array(arr []uint16) []int64 { vArr := make([]int64, 0, len(arr)) for _, item := range arr { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/modules/dns_proxy/dns_proxy_js_record_edns0.go new/bettercap-2.41.7/modules/dns_proxy/dns_proxy_js_record_edns0.go --- old/bettercap-2.41.5/modules/dns_proxy/dns_proxy_js_record_edns0.go 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/modules/dns_proxy/dns_proxy_js_record_edns0.go 2026-05-11 11:43:42.000000000 +0200 @@ -12,7 +12,7 @@ option := e.Option() jsEDNS0 = map[string]interface{}{ - "Option": option, + "Option": int64(option), } var jsVal map[string]interface{} @@ -20,68 +20,68 @@ switch opt := e.(type) { case *dns.EDNS0_LLQ: jsVal = map[string]interface{}{ - "Code": opt.Code, - "Error": opt.Error, - "Id": opt.Id, - "LeaseLife": opt.LeaseLife, - "Opcode": opt.Opcode, - "Version": opt.Version, + "Code": int64(opt.Code), + "Error": int64(opt.Error), + "Id": int64(opt.Id), + "LeaseLife": int64(opt.LeaseLife), + "Opcode": int64(opt.Opcode), + "Version": int64(opt.Version), } case *dns.EDNS0_UL: jsVal = map[string]interface{}{ - "Code": opt.Code, - "Lease": opt.Lease, - "KeyLease": opt.KeyLease, + "Code": int64(opt.Code), + "Lease": int64(opt.Lease), + "KeyLease": int64(opt.KeyLease), } case *dns.EDNS0_NSID: jsVal = map[string]interface{}{ - "Code": opt.Code, + "Code": int64(opt.Code), "Nsid": opt.Nsid, } case *dns.EDNS0_ESU: jsVal = map[string]interface{}{ - "Code": opt.Code, + "Code": int64(opt.Code), "Uri": opt.Uri, } case *dns.EDNS0_DAU: jsVal = map[string]interface{}{ - "AlgCode": opt.AlgCode, - "Code": opt.Code, + "AlgCode": uint8ArrayToInt64Array(opt.AlgCode), + "Code": int64(opt.Code), } case *dns.EDNS0_DHU: jsVal = map[string]interface{}{ - "AlgCode": opt.AlgCode, - "Code": opt.Code, + "AlgCode": uint8ArrayToInt64Array(opt.AlgCode), + "Code": int64(opt.Code), } case *dns.EDNS0_N3U: jsVal = map[string]interface{}{ - "AlgCode": opt.AlgCode, - "Code": opt.Code, + "AlgCode": uint8ArrayToInt64Array(opt.AlgCode), + "Code": int64(opt.Code), } case *dns.EDNS0_SUBNET: jsVal = map[string]interface{}{ "Address": opt.Address.String(), - "Code": opt.Code, - "Family": opt.Family, - "SourceNetmask": opt.SourceNetmask, - "SourceScope": opt.SourceScope, + "Code": int64(opt.Code), + "Family": int64(opt.Family), + "SourceNetmask": int64(opt.SourceNetmask), + "SourceScope": int64(opt.SourceScope), } case *dns.EDNS0_EXPIRE: jsVal = map[string]interface{}{ - "Code": opt.Code, + "Code": int64(opt.Code), "Empty": opt.Empty, - "Expire": opt.Expire, + "Expire": int64(opt.Expire), } case *dns.EDNS0_COOKIE: jsVal = map[string]interface{}{ - "Code": opt.Code, + "Code": int64(opt.Code), "Cookie": opt.Cookie, } case *dns.EDNS0_TCP_KEEPALIVE: jsVal = map[string]interface{}{ - "Code": opt.Code, - "Length": opt.Length, - "Timeout": opt.Timeout, + "Code": int64(opt.Code), + "Length": int64(opt.Length), + "Timeout": int64(opt.Timeout), } case *dns.EDNS0_PADDING: jsVal = map[string]interface{}{ @@ -90,11 +90,11 @@ case *dns.EDNS0_EDE: jsVal = map[string]interface{}{ "ExtraText": opt.ExtraText, - "InfoCode": opt.InfoCode, + "InfoCode": int64(opt.InfoCode), } case *dns.EDNS0_LOCAL: jsVal = map[string]interface{}{ - "Code": opt.Code, + "Code": int64(opt.Code), "Data": string(opt.Data), } default: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/modules/dns_proxy/dns_proxy_js_record_svcb.go new/bettercap-2.41.7/modules/dns_proxy/dns_proxy_js_record_svcb.go --- old/bettercap-2.41.5/modules/dns_proxy/dns_proxy_js_record_svcb.go 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/modules/dns_proxy/dns_proxy_js_record_svcb.go 2026-05-11 11:43:42.000000000 +0200 @@ -12,7 +12,7 @@ key := kv.Key() jsKv := map[string]interface{}{ - "Key": uint16(key), + "Key": int64(key), } switch v := kv.(type) { @@ -23,7 +23,7 @@ case *dns.SVCBECHConfig: jsKv["ECH"] = string(v.ECH) case *dns.SVCBPort: - jsKv["Port"] = v.Port + jsKv["Port"] = int64(v.Port) case *dns.SVCBIPv4Hint: ips := v.Hint jsIps := make([]string, len(ips)) @@ -48,7 +48,7 @@ for i, _key := range keys { jsKeys[i] = uint16(_key) } - jsKv["Code"] = jsKeys + jsKv["Code"] = uint16ArrayToInt64Array(jsKeys) default: return nil, fmt.Errorf("error creating JSSVCBKeyValue: unknown key: %d", key) } @@ -64,20 +64,20 @@ switch key { case dns.SVCB_ALPN: kv = &dns.SVCBAlpn{ - Alpn: jsPropToStringArray(jsKv, "Value"), + Alpn: jsPropToStringArray(jsKv, "Alpn"), } case dns.SVCB_NO_DEFAULT_ALPN: kv = &dns.SVCBNoDefaultAlpn{} case dns.SVCB_ECHCONFIG: kv = &dns.SVCBECHConfig{ - ECH: []byte(jsPropToString(jsKv, "Value")), + ECH: []byte(jsPropToString(jsKv, "ECH")), } case dns.SVCB_PORT: kv = &dns.SVCBPort{ - Port: jsPropToUint16(jsKv, "Value"), + Port: jsPropToUint16(jsKv, "Port"), } case dns.SVCB_IPV4HINT: - jsIps := jsPropToStringArray(jsKv, "Value") + jsIps := jsPropToStringArray(jsKv, "Hint") var ips []net.IP for _, jsIp := range jsIps { ip := net.ParseIP(jsIp) @@ -91,7 +91,7 @@ Hint: ips, } case dns.SVCB_IPV6HINT: - jsIps := jsPropToStringArray(jsKv, "Value") + jsIps := jsPropToStringArray(jsKv, "Hint") var ips []net.IP for _, jsIp := range jsIps { ip := net.ParseIP(jsIp) @@ -106,12 +106,12 @@ } case dns.SVCB_DOHPATH: kv = &dns.SVCBDoHPath{ - Template: jsPropToString(jsKv, "Value"), + Template: jsPropToString(jsKv, "Template"), } case dns.SVCB_OHTTP: kv = &dns.SVCBOhttp{} case dns.SVCB_MANDATORY: - v := jsPropToUint16Array(jsKv, "Value") + v := jsPropToUint16Array(jsKv, "Code") keys := make([]dns.SVCBKey, len(v)) for i, jsKey := range v { keys[i] = dns.SVCBKey(jsKey) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/modules/graph/graph.go new/bettercap-2.41.7/modules/graph/graph.go --- old/bettercap-2.41.5/modules/graph/graph.go 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/modules/graph/graph.go 2026-05-11 11:43:42.000000000 +0200 @@ -140,6 +140,9 @@ } return nil }) + if err != nil { + return err + } } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/modules/mysql_server/mysql_server.go new/bettercap-2.41.7/modules/mysql_server/mysql_server.go --- old/bettercap-2.41.5/modules/mysql_server/mysql_server.go 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/modules/mysql_server/mysql_server.go 2026-05-11 11:43:42.000000000 +0200 @@ -121,15 +121,20 @@ if _, err := conn.Write(packets.MySQLGreeting); err != nil { mod.Warning("error while writing server greeting: %s", err) continue - } else if _, err = reader.Read(readBuffer); err != nil { + } else if read, err = reader.Read(readBuffer); err != nil { mod.Warning("error while reading client message: %s", err) continue } + if read < 37 { + mod.Warning("client handshake too short (%d bytes)", read) + continue + } + // parse client capabilities and validate connection // TODO: parse mysql connections properly and // display additional connection attributes - capabilities := fmt.Sprintf("%08b", (int(uint32(readBuffer[4]) | uint32(readBuffer[5])<<8))) + capabilities := fmt.Sprintf("%016b", (int(uint32(readBuffer[4]) | uint32(readBuffer[5])<<8))) loadData := string(capabilities[8]) username := string(bytes.Split(readBuffer[36:], []byte{0})[0]) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/modules/wifi/wifi_recon_handshakes.go new/bettercap-2.41.7/modules/wifi/wifi_recon_handshakes.go --- old/bettercap-2.41.5/modules/wifi/wifi_recon_handshakes.go 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/modules/wifi/wifi_recon_handshakes.go 2026-05-11 11:43:42.000000000 +0200 @@ -70,7 +70,12 @@ rawPMKID = station.Handshake.AddAndGetPMKID(packet) PMKID := "without PMKID" if rawPMKID != nil { - PMKID = "with PMKID" + // ADDED: Use the existing allZeros function to check for vendor patches (fake PMKIDs) + if allZeros(rawPMKID) { + PMKID = "with FAKE PMKID (all zeros)" + } else { + PMKID = "with valid PMKID" + } } mod.Debug("got frame 1/4 of the %s <-> %s handshake (%s) (anonce:%x)", @@ -118,7 +123,8 @@ } } - validPMKID := rawPMKID != nil + // ADDED: PMKID is only valid if it's not nil AND not all zeros + validPMKID := rawPMKID != nil && !allZeros(rawPMKID) validHalfHandshake := !staIsUs && station.Handshake.Half() validFullHandshake := station.Handshake.Complete() // if we have unsaved packets AND diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/modules/zerogod/zerogod_acceptor.go new/bettercap-2.41.7/modules/zerogod/zerogod_acceptor.go --- old/bettercap-2.41.5/modules/zerogod/zerogod_acceptor.go 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/modules/zerogod/zerogod_acceptor.go 2026-05-11 11:43:42.000000000 +0200 @@ -117,16 +117,25 @@ } } else { a.mod.Debug("accepted %s connection for service %s (port %d): %v", a.proto, tui.Green(a.service), a.port, conn.RemoteAddr()) - go a.handler.Handle(&HandlerContext{ - service: a.service, - mod: a.mod, - client: conn, - srvHost: a.srvHost, - srvPort: int(a.port), - srvTLS: a.tlsConfig != nil, - ippAttributes: a.ippAttributes, - httpPaths: a.httpPaths, - }) + go func() { + ctx := &HandlerContext{ + service: a.service, + mod: a.mod, + client: conn, + srvHost: a.srvHost, + srvPort: int(a.port), + srvTLS: a.tlsConfig != nil, + ippAttributes: a.ippAttributes, + httpPaths: a.httpPaths, + } + defer func() { + if r := recover(); r != nil { + a.mod.Error("panic in %s handler for %s: %v", a.service, conn.RemoteAddr(), r) + conn.Close() + } + }() + a.handler.Handle(ctx) + }() } } a.mod.Debug("%s listener for port %d (%s) stopped", a.proto, a.port, tui.Green(a.service)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/modules/zerogod/zerogod_ipp_primitives.go new/bettercap-2.41.7/modules/zerogod/zerogod_ipp_primitives.go --- old/bettercap-2.41.5/modules/zerogod/zerogod_ipp_primitives.go 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/modules/zerogod/zerogod_ipp_primitives.go 2026-05-11 11:43:42.000000000 +0200 @@ -13,6 +13,7 @@ ) const IPP_CHUNK_MAX_LINE_SIZE = 1024 +const IPP_CHUNK_MAX_SIZE = 10 * 1024 * 1024 // 10 MB var IPP_REQUEST_NAMES = map[int16]string{ // https://tools.ietf.org/html/rfc2911#section-4.4.15 @@ -136,6 +137,8 @@ return nil, fmt.Errorf("error reading next chunk size: %v", err) } else if chunkSize == 0 { break + } else if chunkSize > IPP_CHUNK_MAX_SIZE { + return nil, fmt.Errorf("chunk size %d exceeds maximum allowed size of %d bytes", chunkSize, IPP_CHUNK_MAX_SIZE) } else { chunk := make([]byte, chunkSize) if n, err := ctx.client.Read(chunk); err != nil { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/network/net_linux.go new/bettercap-2.41.7/network/net_linux.go --- old/bettercap-2.41.5/network/net_linux.go 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/network/net_linux.go 2026-05-11 11:43:42.000000000 +0200 @@ -143,13 +143,10 @@ } func GetSupportedFrequencies(iface string) ([]int, error) { - // give priority to iwlist because of https://github.com/bettercap/bettercap/issues/881 - // UPDATE: Changed the priority due iwlist doesn't support 6GHz - if core.HasBinary("iw") { - return iwSupportedFrequencies(iface) - } else if core.HasBinary("iwlist") { + // rely on iwlist only because of https://github.com/bettercap/bettercap/issues/1243 + if core.HasBinary("iwlist") { return iwlistSupportedFrequencies(iface) } - return nil, fmt.Errorf("no iw or iwlist binaries found in $PATH") + return nil, fmt.Errorf("no iwlist binaries found in $PATH") } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/packets/icmp6.go new/bettercap-2.41.7/packets/icmp6.go --- old/bettercap-2.41.5/packets/icmp6.go 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/packets/icmp6.go 2026-05-11 11:43:42.000000000 +0200 @@ -59,7 +59,7 @@ } prefixData := []byte{ prefixLength, - 0x0c, // flags + 0xc0, // flags 0x00, 0x27, 0x8d, 0x00, // valid lifetime (2592000) 0x00, 0x09, 0x3a, 0x80, // preferred lifetime (604800) 0x00, 0x00, 0x00, 0x00, // reserved diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/bettercap-2.41.5/packets/icmp6_test.go new/bettercap-2.41.7/packets/icmp6_test.go --- old/bettercap-2.41.5/packets/icmp6_test.go 2025-12-15 14:26:34.000000000 +0100 +++ new/bettercap-2.41.7/packets/icmp6_test.go 2026-05-11 11:43:42.000000000 +0200 @@ -221,6 +221,9 @@ if len(opt.Data) > 0 && opt.Data[0] != prefixLength { t.Errorf("PrefixInfo prefix length = %d, want %d", opt.Data[0], prefixLength) } + if len(opt.Data) > 1 && opt.Data[1] != 192 { + t.Errorf("PrefixInfo prefix flags = %d, want 192", opt.Data[1]) + } } } ++++++ bettercap.obsinfo ++++++ --- /var/tmp/diff_new_pack.NZeAuW/_old 2026-05-11 17:09:24.366573371 +0200 +++ /var/tmp/diff_new_pack.NZeAuW/_new 2026-05-11 17:09:24.370573535 +0200 @@ -1,5 +1,5 @@ name: bettercap -version: 2.41.5 -mtime: 1765805194 -commit: e71140334ed0d309413512462b2c35c6f513b832 +version: 2.41.7 +mtime: 1778492622 +commit: dfe56780bb342b6a6715c9557a2cefe1f13d805c ++++++ vendor.tar.gz ++++++
