7

I use this on Ubuntu 20.04 and Raspberry Pi OS 5.10 but this is not a Linux related issue.

I'm having an issue with a Go program called Bettercap 2 ( https://www.bettercap.org/ and the repository: https://github.com/bettercap/bettercap ) when I use its function to scan bluetooth devices "ble.recon on" with a different bluetooth dongle.

When I use it with a dongle using Realtek RTL8761b drivers ( MPOW MPBH456AB ) you can find on amazon it works well, but when I use a NordicSemi nrf52840 dongle ( https://www.nordicsemi.com/Products/Development-hardware/nrf52840-dongle ) which is my goal, flashed with Zephyr RTOS' hci_usb sample ( https://github.com/zephyrproject-rtos/zephyr/tree/main/samples/bluetooth/hci_usb ) which is supposed to turn any micro controller using bluetooth into a regular bluetooth dongle that any computer is supposed to recognize as, it throws this error:

>> ble.recon on
   panic: runtime error: slice bounds out of range [:1] with capacity 0

   goroutine 1 [running]:
   github.com/bettercap/gatt/linux/cmd.(*Cmd).SendAndCheckResp(0x1c637c0, 0xa0c760, 0x1c64fe8, 0x1c6501c, 0x1, 0x1, 0x0, 0x0)
    /home/pi/go/pkg/mod/github.com/bettercap/gatt@v0.0.0-20210514133428-df6e615f2f67/linux/cmd/cmd.go:98 +0x1b4
   github.com/bettercap/gatt/linux.(*HCI).resetDevice(0x18ac0a0, 0x93dc10, 0x18ac0a0)
    /home/pi/go/pkg/mod/github.com/bettercap/gatt@v0.0.0-20210514133428-df6e615f2f67/linux/hci.go:273 +0x2f0
   github.com/bettercap/gatt/linux.NewHCI(0xffffffff, 0x184fd01, 0xff, 0x2, 0x0, 0x0)
    /home/pi/go/pkg/mod/github.com/bettercap/gatt@v0.0.0-20210514133428-df6e615f2f67/linux/hci.go:90 +0x4c0
   github.com/bettercap/gatt.NewDevice(0x184fd1c, 0x2, 0x2, 0x3c, 0x184fd24, 0x1, 0x1)
    /home/pi/go/pkg/mod/github.com/bettercap/gatt@v0.0.0-20210514133428-df6e615f2f67/device_linux.go:57 +0x114
   github.com/bettercap/bettercap/modules/ble.(*BLERecon).Configure(0x18a2780, 0x0, 0x4)
    /home/pi/go/pkg/mod/github.com/bettercap/bettercap@v2.24.1+incompatible/modules/ble/ble_recon.go:165 +0x1cc
   github.com/bettercap/bettercap/modules/ble.(*BLERecon).Start(0x18a2780, 0x1, 0x1b2c001)
    /home/pi/go/pkg/mod/github.com/bettercap/bettercap@v2.24.1+incompatible/modules/ble/ble_recon.go:183 +0x1c
   github.com/bettercap/bettercap/modules/ble.NewBLERecon.func1(0x0, 0x0, 0x0, 0x84f358, 0xc)
    /home/pi/go/pkg/mod/github.com/bettercap/bettercap@v2.24.1+incompatible/modules/ble/ble_recon.go:56 +0x1c
   github.com/bettercap/bettercap/session.(*ModuleHandler).Exec(0x1b2c0c0, 0x0, 0x0, 0x0, 0x0, 0x0)
    /home/pi/go/pkg/mod/github.com/bettercap/bettercap@v2.24.1+incompatible/session/module_handler.go:74 +0x80
   github.com/bettercap/bettercap/session.(*Session).Run(0x18fb2c0, 0x1c64e30, 0xc, 0x1, 0x1)
    /home/pi/go/pkg/mod/github.com/bettercap/bettercap@v2.24.1+incompatible/session/session.go:416 +0x284
   main.main()
    /home/pi/go/pkg/mod/github.com/bettercap/bettercap@v2.24.1+incompatible/main.go:94 +0x8c8

I have no idea what it means as I'm not a Go developer and have never used this language, I've looked at the error and it seems to be in the code but not knowing Go, I prefer to ask before I modify anything.

The problem is only when I'm using the nrf dongle, otherwise it works with the host's bluetooth and the other realtek dongle.

The nrf dongle works with the BlueZ stack, here are the results:

bluetoothctl ( has a BD address ) Scan does work

$ sudo bluetoothctl
  Agent registered
  [bluetooth]# list
  Controller EB:XX:XX:XX:XX:XX BlueZ 5.50 [default]

btmgmt ( finds the controller ) Scan does work

$ sudo btmgmt --index 0
   [hci0]# auto-power
   Found controller with index 0
   [hci0]# find -l

But, although deprecated, hciconfig and hcitool recognize the realtek dongle but for this one, here are the results:

hciconfig ( no BD address )

$ hciconfig
  hci0:   Type: Primary  Bus: USB
    BD Address: 00:00:00:00:00:00  ACL MTU: 27:7  SCO MTU: 0:0
    UP RUNNING
    RX bytes:1593 acl:0 sco:0 events:88 errors:0
    TX bytes:285 acl:0 sco:0 commands:51 errors:0

hcitool ( Doesn't find the controller )

$ hcitool scan
  Scanning ...
  Inquiry failed: Operation not supported

So, I assume the dongle works well with BlueZ, being the Linux official bluetooth stack it's a good sign, but I thought that Bettercap was also using BlueZ and in that sense the dongle should work.

I don't think there are any drivers to install for the dongle as of the fact that when it is flashed ( J-Link ) it turns into a generic bluetooth dongle.

Do you have any idea what the problem could be ?

Braiam
  • 1
  • 11
  • 47
  • 78
Jimmy
  • 105
  • 15
  • 3
    Have you tried contacting the developer on their own repository? There was a reported issue and a fix implemented https://github.com/bettercap/bettercap/issues/612 – Braiam Oct 31 '21 at 12:56
  • @Braiam apparently this issue is about their net_sniff module not ble.recon, I don't think it applies to the same and the developer is not answering, we've opened two issues in the past 2 months but no one has answered, if you know what the problem is and how to solve it it would pretty much start our company – Jimmy Nov 08 '21 at 06:34

1 Answers1

3

I believe the error is coming from https://github.com/bettercap/gatt/blob/master/linux/cmd/cmd.go#L98

The program is attempting to write something to the device and expects that it will receive a response as long as there was no error sending. But apparently the Send call is successful but receives an empty response.

I'd suggest opening an issue over there and asking your question.

Gari Singh
  • 11,418
  • 2
  • 18
  • 41
  • First off, thank you for having taken the time to take a look at the issue and have looked through the code. Can you explain why this could be a Bettercap/gatt issue and not a Bettercap/bettercap issue ? Also if you can solve this man I can offer you a monetary compensation, this is very important for me to solve that problem and it is urgent – Jimmy Sep 10 '21 at 19:59
  • I submitted an [issue](https://github.com/bettercap/gatt/issues/23) related to this problem, on the GitHub repository of the library. Hope that helps in some way – Gealber Sep 13 '21 at 11:52
  • Thank you very much @Gealber , you're awesome. Do you know if I can modify the rsp thing on the nrf52840 dongle or the sample flashed into it ? or is it a hardware issue ? I figured since it worked with a cheap bluetooth dongle it must be possible to "add" it to the nrf52840 dongle right ? – Jimmy Sep 13 '21 at 20:01
  • Unfortunately I just read that code for the first time yesterday, so no idea what it really does. I know that the problem is a typical problem that is faced in any programming language, that check for the boundary of the array when trying to access its elements. But I don't know the library in a way that I could help you more. – Gealber Sep 14 '21 at 04:32
  • Not yet. I actually ordered a NordicSemi nrf52840 dongle so will see what's going on – Gari Singh Sep 18 '21 at 10:10
  • Hey @GariSingh did you receive your dongle ? let me know please and thank you for helping – Jimmy Nov 01 '21 at 20:53