sliver
sliver copied to clipboard
Datarace on session changes
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:
- Build server using
-race
flag - Create a lof of sessions
- Use
use
command to change them. - 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 :)