sliver icon indicating copy to clipboard operation
sliver copied to clipboard

Datarace on session changes

Open mrThe opened this issue 2 years ago • 0 comments

Describe the bug If you have a lot of sessions, there is chance of data racing when changing active session. In theory it may lead to very unexpected issues.

To Reproduce Steps to reproduce the behavior:

  1. Build server using -race flag
  2. Create a lof of sessions
  3. Use use command to change them.
  4. See error

Expected behavior No error.

==================
WARNING: DATA RACE
Read at 0x00c0005622a0 by goroutine 85:
  github.com/bishopfox/sliver/client/console.(*ActiveTarget).GetSession()
      github.com/bishopfox/sliver/client/console/console.go:556 +0xd90
  github.com/bishopfox/sliver/client/console.(*SliverConsoleClient).EventLoop()
      github.com/bishopfox/sliver/client/console/console.go:217 +0xd5d
  github.com/bishopfox/sliver/client/console.Start.func3()
      github.com/bishopfox/sliver/client/console/console.go:139 +0x39

Previous write at 0x00c0005622a0 by main goroutine:
  github.com/bishopfox/sliver/client/console.(*ActiveTarget).Set()
      github.com/bishopfox/sliver/client/console/console.go:613 +0x258
  github.com/bishopfox/sliver/client/command/sessions.CloseSessionCmd()
      github.com/bishopfox/sliver/client/command/sessions/close.go:48 +0x1f2
  github.com/bishopfox/sliver/client/command.BindCommands.func56()
      github.com/bishopfox/sliver/client/command/commands.go:666 +0x4b
  github.com/desertbit/grumble.(*App).RunCommand()
      github.com/desertbit/[email protected]/app.go:269 +0x31b
  github.com/desertbit/grumble.(*App).runShell()
      github.com/desertbit/[email protected]/app.go:461 +0x6fa
  github.com/desertbit/grumble.(*App).Run()
      github.com/desertbit/[email protected]/app.go:393 +0xd71
  github.com/bishopfox/sliver/client/console.Start()
      github.com/bishopfox/sliver/client/console/console.go:142 +0xa64
  github.com/bishopfox/sliver/server/console.Start()
      github.com/bishopfox/sliver/server/console/console.go:61 +0x5db
[server] sliver >   github.com/bishopfox/sliver/server/cli.glob..func3()
      github.com/bishopfox/sliver/server/cli/cli.go:138 +0x176
  github.com/spf13/cobra.(*Command).execute()
      github.com/spf13/[email protected]/command.go:854 +0xb47
  github.com/spf13/cobra.(*Command).ExecuteC()
      github.com/spf13/[email protected]/command.go:958 +0x5c9
  github.com/spf13/cobra.(*Command).Execute()
      github.com/spf13/[email protected]/command.go:895 +0x3c
  github.com/bishopfox/sliver/server/cli.Execute()
      github.com/bishopfox/sliver/server/cli/cli.go:145 +0x25
  main.main()
      github.com/bishopfox/sliver/server/main.go:43 +0x24

Goroutine 85 (running) created at:
  github.com/bishopfox/sliver/client/console.Start()
      github.com/bishopfox/sliver/client/console/console.go:139 +0x9c7
  github.com/bishopfox/sliver/server/console.Start()
      github.com/bishopfox/sliver/server/console/console.go:61 +0x5db
  github.com/bishopfox/sliver/server/cli.glob..func3()
      github.com/bishopfox/sliver/server/cli/cli.go:138 +0x176
  github.com/spf13/cobra.(*Command).execute()
      github.com/spf13/[email protected]/command.go:854 +0xb47
  github.com/spf13/cobra.(*Command).ExecuteC()
      github.com/spf13/[email protected]/command.go:958 +0x5c9
  github.com/spf13/cobra.(*Command).Execute()
      github.com/spf13/[email protected]/command.go:895 +0x3c
  github.com/bishopfox/sliver/server/cli.Execute()
      github.com/bishopfox/sliver/server/cli/cli.go:145 +0x25
  main.main()
      github.com/bishopfox/sliver/server/main.go:43 +0x24
==================



==================
WARNING: DATA RACE
Read at 0x00c0005622a8 by goroutine 85:
  github.com/bishopfox/sliver/client/console.(*ActiveTarget).GetBeacon()
      github.com/bishopfox/sliver/client/console/console.go:570 +0x1c4
  github.com/bishopfox/sliver/client/console.(*SliverConsoleClient).GetPrompt()
      github.com/bishopfox/sliver/client/console/console.go:349 +0x194
  github.com/bishopfox/sliver/client/console.(*SliverConsoleClient).EventLoop()
      github.com/bishopfox/sliver/client/console/console.go:256 +0x1a66
  github.com/bishopfox/sliver/client/console.Start.func3()
      github.com/bishopfox/sliver/client/console/console.go:139 +0x39

Previous write at 0x00c0005622a8 by main goroutine:
  github.com/bishopfox/sliver/client/console.(*ActiveTarget).Set()
      github.com/bishopfox/sliver/client/console/console.go:614 +0x295
  github.com/bishopfox/sliver/client/command/sessions.CloseSessionCmd()
      github.com/bishopfox/sliver/client/command/sessions/close.go:48 +0x1f2
  github.com/bishopfox/sliver/client/command.BindCommands.func56()
      github.com/bishopfox/sliver/client/command/commands.go:666 +0x4b
  github.com/desertbit/grumble.(*App).RunCommand()
      github.com/desertbit/[email protected]/app.go:269 +0x31b
  github.com/desertbit/grumble.(*App).runShell()
      github.com/desertbit/[email protected]/app.go:461 +0x6fa
  github.com/desertbit/grumble.(*App).Run()
      github.com/desertbit/[email protected]/app.go:393 +0xd71
  github.com/bishopfox/sliver/client/console.Start()
      github.com/bishopfox/sliver/client/console/console.go:142 +0xa64
  github.com/bishopfox/sliver/server/console.Start()
      github.com/bishopfox/sliver/server/console/console.go:61 +0x5db
  github.com/bishopfox/sliver/server/cli.glob..func3()
      github.com/bishopfox/sliver/server/cli/cli.go:138 +0x176
  github.com/spf13/cobra.(*Command).execute()
      github.com/spf13/[email protected]/command.go:854 +0xb47
  github.com/spf13/cobra.(*Command).ExecuteC()
      github.com/spf13/[email protected]/command.go:958 +0x5c9
  github.com/spf13/cobra.(*Command).Execute()
      github.com/spf13/[email protected]/command.go:895 +0x3c
  github.com/bishopfox/sliver/server/cli.Execute()
      github.com/bishopfox/sliver/server/cli/cli.go:145 +0x25
  main.main()
      github.com/bishopfox/sliver/server/main.go:43 +0x24

Goroutine 85 (running) created at:
  github.com/bishopfox/sliver/client/console.Start()
      github.com/bishopfox/sliver/client/console/console.go:139 +0x9c7
  github.com/bishopfox/sliver/server/console.Start()
      github.com/bishopfox/sliver/server/console/console.go:61 +0x5db
  github.com/bishopfox/sliver/server/cli.glob..func3()
      github.com/bishopfox/sliver/server/cli/cli.go:138 +0x176
  github.com/spf13/cobra.(*Command).execute()
      github.com/spf13/[email protected]/command.go:854 +0xb47
  github.com/spf13/cobra.(*Command).ExecuteC()
      github.com/spf13/[email protected]/command.go:958 +0x5c9
  github.com/spf13/cobra.(*Command).Execute()
      github.com/spf13/[email protected]/command.go:895 +0x3c
  github.com/bishopfox/sliver/server/cli.Execute()
      github.com/bishopfox/sliver/server/cli/cli.go:145 +0x25
  main.main()
      github.com/bishopfox/sliver/server/main.go:43 +0x24











[server] sliver > ==================
WARNING: DATA RACE
Write at 0x00c000410040 by main goroutine:
  github.com/desertbit/grumble.(*App).SetPrompt()
      github.com/desertbit/[email protected]/app.go:101 +0x124
  github.com/bishopfox/sliver/client/console.Start.func2()
      github.com/bishopfox/sliver/client/console/console.go:136 +0x2b
  github.com/bishopfox/sliver/client/console.(*ActiveTarget).Set()
      github.com/bishopfox/sliver/client/console/console.go:616 +0x370
  github.com/bishopfox/sliver/client/command/sessions.CloseSessionCmd()
      github.com/bishopfox/sliver/client/command/sessions/close.go:48 +0x1f2
  github.com/bishopfox/sliver/client/command.BindCommands.func56()
      github.com/bishopfox/sliver/client/command/commands.go:666 +0x4b
  github.com/desertbit/grumble.(*App).RunCommand()
      github.com/desertbit/[email protected]/app.go:269 +0x31b
  github.com/desertbit/grumble.(*App).runShell()
      github.com/desertbit/[email protected]/app.go:461 +0x6fa
  github.com/desertbit/grumble.(*App).Run()
      github.com/desertbit/[email protected]/app.go:393 +0xd71
  github.com/bishopfox/sliver/client/console.Start()
      github.com/bishopfox/sliver/client/console/console.go:142 +0xa64
  github.com/bishopfox/sliver/server/console.Start()
      github.com/bishopfox/sliver/server/console/console.go:61 +0x5db
  github.com/bishopfox/sliver/server/cli.glob..func3()
      github.com/bishopfox/sliver/server/cli/cli.go:138 +0x176
  github.com/spf13/cobra.(*Command).execute()
      github.com/spf13/[email protected]/command.go:854 +0xb47
  github.com/spf13/cobra.(*Command).ExecuteC()
      github.com/spf13/[email protected]/command.go:958 +0x5c9
  github.com/spf13/cobra.(*Command).Execute()
      github.com/spf13/[email protected]/command.go:895 +0x3c
  github.com/bishopfox/sliver/server/cli.Execute()
      github.com/bishopfox/sliver/server/cli/cli.go:145 +0x25
  main.main()
      github.com/bishopfox/sliver/server/main.go:43 +0x24

Previous write at 0x00c000410040 by goroutine 85:
  github.com/desertbit/grumble.(*App).SetPrompt()
      github.com/desertbit/[email protected]/app.go:101 +0xff1
  github.com/bishopfox/sliver/client/console.(*SliverConsoleClient).EventLoop()
      github.com/bishopfox/sliver/client/console/console.go:222 +0xeba
  github.com/bishopfox/sliver/client/console.Start.func3()
      github.com/bishopfox/sliver/client/console/console.go:139 +0x39

Goroutine 85 (running) created at:
  github.com/bishopfox/sliver/client/console.Start()
      github.com/bishopfox/sliver/client/console/console.go:139 +0x9c7
  github.com/bishopfox/sliver/server/console.Start()
      github.com/bishopfox/sliver/server/console/console.go:61 +0x5db
  github.com/bishopfox/sliver/server/cli.glob..func3()
      github.com/bishopfox/sliver/server/cli/cli.go:138 +0x176
  github.com/spf13/cobra.(*Command).execute()
      github.com/spf13/[email protected]/command.go:854 +0xb47
  github.com/spf13/cobra.(*Command).ExecuteC()
      github.com/spf13/[email protected]/command.go:958 +0x5c9
  github.com/spf13/cobra.(*Command).Execute()
      github.com/spf13/[email protected]/command.go:895 +0x3c
  github.com/bishopfox/sliver/server/cli.Execute()
      github.com/bishopfox/sliver/server/cli/cli.go:145 +0x25
  main.main()
      github.com/bishopfox/sliver/server/main.go:43 +0x24
==================

This should be easy fixable using a mutex in client/console/console.go while working with sessions and beacons, guess this issue a good candidate to "help wanted", i'm just a bit too tired to fix it myself :)

mrThe avatar Jun 04 '22 15:06 mrThe