Any configuration files of programs the user might call, such as editors, ssh, terminal emulators, shells or anything the user regularly executes.
Every binary that loads data from the user directory for user configuration is a vector for further inserting oneself into the system.
The spellcheck function of Nano can be exploited to spawn a subprocess that takes over the session. When you exit Nano, you're exiting this new subprocess and end up in a shell that has been manipulated.
Same for Vim.
SSH can be manipulated into replacing your shell easily by editing authorized_keys.
If a program has write access to your home directory, you cannot trust the shell you open.
Even something as innocous as git status being included in your prompt can be abused to gain control of your shell session. Once you have that you just wait for sudo to be entered or you manipulate the shell to execute an attacker's code instead of sudo when called.