I had sent this question as an email to WhatsApp support too, and I've now received a reply from them with complete explanations of the permissions. Pasting that reply below:
Thanks for your message. We strive to keep this information as up to date and as accurate as possible.
However, at times, it is possible that Google or your handset maker may change, deprecate or remove various permissions.
Category: Your messages
Permission: Receive text messages (android.permission.RECEIVE_SMS)
Explanation: We use this to be able to read the SMS we send to your phone to verify your phone number.
Category: Storage
Permission: Modify or delete the contents of your USB storage (android.permission.WRITE_EXTERNAL_STORAGE)
Explanation: We store your media and chat history backups on the USB storage.
Category: System Tools
Permission: Modify system settings (android.permission.WRITE_SETTINGS)
Explanation: We need this to read your settings, we do not write any settings, but there is only a write settings permission which includes the ability to read settings.
Permission: install shortcuts (com.android.launcher.permission.INSTALL_SHORTCUT)
Explanation: We use this to install a WhatsApp shortcut or conversation shortcut on your homescreen.
Permission: uninstall shortcuts (com.android.launcher.permission.UNINSTALL_SHORTCUT)
Explanation: We use this to make sure we do not create duplicate shortcuts on your homescreen.
Category: Your location
Permission: approximate (network-based) location (android.permission.ACCESS_COARSE_LOCATION)
Explanation: We use this so that you can send your location to your friends.
Permission: precise (GPS) location (android.permission.ACCESS_FINE_LOCATION)
Explanation: We use this so that you can send your location to your friends.
Category: Services that cost you money
Permission: directly call phone numbers (android.permission.CALL_PHONE)
Explanation: We need this so that we can have the "Call" ability in the app.
Permission: send SMS messages (android.permission.SEND_SMS)
Explanation: You may send an SMS by using our tell a friend feature to tell a friend about WhatsApp.
Category: Camera
Permission: Take pictures or videos (android.permission.CAMERA)
Explanation: We use this to allow you to take pictures from inside WhatsApp. Read more here
Category: Microphone
Permission: record audio (android.permission.RECORD_AUDIO)
Explanation: We use this to allow you to record Voice Notes to send to your friends.
Category: Your accounts
Permission: Add or remove accounts (android.permission.MANAGE_ACCOUNTS)
Explanation: We use this to add a WhatsApp account to your device to show your WhatsAppable contacts.
Permission: create accounts and set passwords (android.permission.AUTHENTICATE_ACCOUNTS)
Explanation: We use this to add a WhatsApp account to your device.
Permission: use accounts on the device (android.permission.USE_CREDENTIALS)
Explanation: We need this permission to read and write your WhatsApp credentials.
Permission: find accounts on the device (android.permission.GET_ACCOUNTS)
Explanation: This is necessary to find which accounts to check for WhatsApp contacts.
Permission: read Google service configuration (android.providers.gsf.permission.READ_GSERVICES)
Explanation: This is used for Google Maps integration in WhatsApp location sharing.
Category: Your social information
Permission: modify your contacts (android.permission.WRITE_CONTACTS)
Explanation: This is necessary so that we can add the WhatsApp button into your contacts so you can send a WhatsApp to your friends from anywhere in your phone.
Permission: read your contacts (android.permission.READ_CONTACTS)
Explanation: We use this in order to automatically add all your friends that have WhatsApp installed on their phones.
Category: Your personal information
Permission: read your own contact card (android.permission.READ_PROFILE)
Explanation: We use this to try and set a default profile name.
Permission: read call log (android.permission.READ_CALL_LOG)
Explanation: This permission is not needed but is granted transitively from READ_CONTACTS because we support old versions of Android.
Permission: write call log (android.permission.WRITE_CALL_LOG)
Explanation: This permission is not needed but is granted transitively from WRITE_CONTACTS because we support old versions of Android.
Category: Phone calls
Permission: read phone status and identity (android.permission.READ_PHONE_STATE)
Explanation: We need this so that we don't annoy you when you are on the phone.
Category: Your applications information
Permission: run at startup (android.permission.RECEIVE_BOOT_COMPLETED)
Explanation: We use this to make sure the app is running to make sure you get your messages on time.
Permission: retrieve running apps (android.permission.GET_TASKS)
Explanation: We need this in order to see if you are running any Task Killers, which may cause problems with our application.
Category: Sync Settings
Permission: read sync settings (android.permission.READ_SYNC_SETTINGS)
Explanation: We use this to make sure you get your messages on time.
Permission: read sync statistics (android.permission.READ_SYNC_STATS)
Explanation: We use this to debug possible problems in getting your messages on time.
Permission: toggle sync on and off (android.permission.WRITE_SYNC_SETTINGS)
Explanation: We use this so that we can make sure your WhatsApp contacts are up to date.
Category: Development tools
Permission: test access to protected storage (android.permission.READ_EXTERNAL_STORAGE)
Explanation: We store data onto the external storage. The permission is granted transitively by android.permission.WRITE_EXTERNAL_STORAGE. We have no idea why Google describes the permission thusly.
Category: Affects Battery
Permission: control vibration (android.permission.VIBRATE)
Explanation: to notify you of a new message, we may vibrate your phone.
Permission: prevent phone from sleeping (android.permission.WAKE_LOCK)
Explanation: We need this to make sure that when a friend sends you a file, it doesn't get broken by your phone going to sleep.
Category: Network communication
Permission: full network access (android.permission.INTERNET)
Explanation: Without this we wouldn't be able to send your chat messages.
Permission: google play billing service (com.android.vending.BILLING)
Explanation: We use this to allow you to pay for the WhatsApp subscription.
Permission: receive data from internet (com.google.android.c2dm.permission.RECEIVE)
Explanation: We use this to make sure that you get your messages on time.
Permission: view wifi connections (android.permission.ACCESS_WIFI_STATE)
Explanation: We use this to check and see if you are on a Wi-Fi that WhatsApp won't work on.
Permission: view network connections (android.permission.ACCESS_NETWORK_STATE)
Explanation: We use this to diagnose your network connection and have the app react accordingly to ensure you get your messages on time.
Permission: full network access (android.permission.INTERNET)
Explanation: We need this to open socket connections to our servers in order to make sending and receiving messages fast.
android.permission.NFC
— would be interesting to know why they need this 🤔