The -p option of the sftp put command is supposed to copy timestamps and permissions, thereby implying that they are not copied when you leave out the -p option. This is only partly the case when you use the recursive option. When using -r, permissions are always copied, regardless of the -p option. Patch is located at https://patch-diff.githubusercontent.com/raw/openssh/openssh-portable/pull/145.patch
I think that's a bit of an overbroad hammer - IMO users generally want some permissions to be preserved, e.g. X bits. Unfortunately, the sftp protocol doesn't have notions of umask or changing only a subset of permission bits - either the client specifies all of them or none of them.