Skip to content

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Push Updates NOT working on iOS, but work perfectly for Droid and Web #5002

Closed
LeeWhite187 opened this issue Sep 27, 2024 · 5 comments · Fixed by #5081
Closed

Push Updates NOT working on iOS, but work perfectly for Droid and Web #5002

LeeWhite187 opened this issue Sep 27, 2024 · 5 comments · Fixed by #5081
Labels
bug Something isn't working

Comments

@LeeWhite187
Copy link

Vaultwarden Support String

Your environment (Generated via diagnostics page)

  • Vaultwarden version: v1.32.0
  • Web-vault version: v2024.6.2b
  • OS/Arch: linux/x86_64
  • Running within a container: true (Base: Debian)
  • Environment settings overridden: true
  • Uses a reverse proxy: true
  • IP Header check: true (X-Real-IP)
  • Internet access: true
  • Internet access via a proxy: false
  • DNS Check: true
  • Browser/Server Time Check: true
  • Server/NTP Time Check: true
  • Domain Configuration Check: true
  • HTTPS Check: true
  • Database type: SQLite
  • Database version: 3.46.0
  • Clients used:
  • Reverse proxy and version:
  • Other relevant information:

Config (Generated via diagnostics page)

Show Running Config

Environment settings which are overridden: DOMAIN, ADMIN_TOKEN

{
  "_duo_akey": null,
  "_enable_duo": true,
  "_enable_email_2fa": true,
  "_enable_smtp": true,
  "_enable_yubico": true,
  "_icon_service_csp": "",
  "_icon_service_url": "",
  "_ip_header_enabled": true,
  "_max_note_size": 10000,
  "_smtp_img_src": "cid:",
  "admin_ratelimit_max_burst": 3,
  "admin_ratelimit_seconds": 300,
  "admin_session_lifetime": 20,
  "admin_token": "***",
  "allowed_iframe_ancestors": "",
  "attachments_folder": "data/attachments",
  "auth_request_purge_schedule": "30 * * * * *",
  "authenticator_disable_time_drift": false,
  "data_folder": "data",
  "database_conn_init": "",
  "database_max_conns": 10,
  "database_timeout": 30,
  "database_url": "***************",
  "db_connection_retries": 15,
  "disable_2fa_remember": false,
  "disable_admin_token": false,
  "disable_icon_download": false,
  "domain": "*****://**********************",
  "domain_origin": "*****://**********************",
  "domain_path": "",
  "domain_set": true,
  "duo_context_purge_schedule": "30 * * * * *",
  "duo_host": null,
  "duo_ikey": null,
  "duo_skey": null,
  "duo_use_iframe": false,
  "email_2fa_auto_fallback": false,
  "email_2fa_enforce_on_verified_invite": false,
  "email_attempts_limit": 3,
  "email_change_allowed": true,
  "email_expiration_time": 600,
  "email_token_size": 6,
  "emergency_access_allowed": true,
  "emergency_notification_reminder_schedule": "0 3 * * * *",
  "emergency_request_timeout_schedule": "0 7 * * * *",
  "enable_db_wal": true,
  "enable_websocket": true,
  "event_cleanup_schedule": "0 10 0 * * *",
  "events_days_retain": null,
  "experimental_client_feature_flags": "fido2-vault-credentials",
  "extended_logging": true,
  "helo_name": null,
  "hibp_api_key": null,
  "http_request_block_non_global_ips": true,
  "http_request_block_regex": null,
  "icon_blacklist_non_global_ips": true,
  "icon_blacklist_regex": null,
  "icon_cache_folder": "data/icon_cache",
  "icon_cache_negttl": 259200,
  "icon_cache_ttl": 2592000,
  "icon_download_timeout": 10,
  "icon_redirect_code": 302,
  "icon_service": "internal",
  "incomplete_2fa_schedule": "30 * * * * *",
  "incomplete_2fa_time_limit": 3,
  "increase_note_size_limit": false,
  "invitation_expiration_hours": 120,
  "invitation_org_name": "Vaultwarden",
  "invitations_allowed": true,
  "ip_header": "X-Real-IP",
  "job_poll_interval_ms": 30000,
  "log_file": null,
  "log_level": "debug",
  "log_timestamp_format": "%Y-%m-%d %H:%M:%S.%3f",
  "login_ratelimit_max_burst": 10,
  "login_ratelimit_seconds": 60,
  "org_attachment_limit": null,
  "org_creation_users": "",
  "org_events_enabled": false,
  "org_groups_enabled": false,
  "password_hints_allowed": true,
  "password_iterations": 600000,
  "push_enabled": true,
  "push_identity_uri": "https://identity.bitwarden.com",
  "push_installation_id": "***",
  "push_installation_key": "***",
  "push_relay_uri": "https://push.bitwarden.com",
  "reload_templates": false,
  "require_device_email": false,
  "rsa_key_filename": "data/rsa_key",
  "send_purge_schedule": "0 5 * * * *",
  "sendmail_command": null,
  "sends_allowed": true,
  "sends_folder": "data/sends",
  "show_password_hint": false,
  "signups_allowed": false,
  "signups_domains_whitelist": "",
  "signups_verify": false,
  "signups_verify_resend_limit": 6,
  "signups_verify_resend_time": 3600,
  "smtp_accept_invalid_certs": false,
  "smtp_accept_invalid_hostnames": false,
  "smtp_auth_mechanism": null,
  "smtp_debug": false,
  "smtp_embed_images": true,
  "smtp_explicit_tls": null,
  "smtp_from": "*****************************",
  "smtp_from_name": "Vaultwarden",
  "smtp_host": "******************",
  "smtp_password": "***",
  "smtp_port": 587,
  "smtp_security": "starttls",
  "smtp_ssl": null,
  "smtp_timeout": 15,
  "smtp_username": "*****************************",
  "templates_folder": "data/templates",
  "tmp_folder": "data/tmp",
  "trash_auto_delete_days": null,
  "trash_purge_schedule": "0 5 0 * * *",
  "use_sendmail": false,
  "use_syslog": false,
  "user_attachment_limit": null,
  "user_send_limit": null,
  "web_vault_enabled": true,
  "web_vault_folder": "web-vault/",
  "yubico_client_id": null,
  "yubico_secret_key": null,
  "yubico_server": null
}

Vaultwarden Build Version

1.32.0

Deployment method

Official Container Image

Custom deployment method

self-hosted vaultwarden
Running behind an nginx proxy, following the several examples in the guide, with websocket (web ui sync) working well for connected clients.

Reverse Proxy

nginx/1.18.0 (Ubuntu)

Host/Server Operating System

Linux

Operating System Version

Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-72-generic x86_64)

Clients

iOS

Client Version

Bitwarden app version: 2024.9.2, on iOS 16.1.1

Steps To Reproduce

  1. Log into user account on: web ui, android, and iOS.
  2. From the web ui, create a new item in the user's vault.
  3. From the android app, verify the new item appears in the vault (via droid push).
  4. From the iOS app, verify the new item FAILS to appear in the vault (via APNS).
  5. From the iOS app, perform a 'Sync Now' via: Settings/Other/Sync Now.
  6. From the iOS app, verify the new item now appears in the vault (via excplicit web sync call).

Expected Result

Adding a new item to a user's vault from the web ui, triggers a push notification for a droid client.
Adding a new item to a user's vault from the web ui, triggers a push notification for an iOS client.

Actual Result

Adding a new item to a user's vault from the web ui, triggers a push notification for a droid client.
Adding a new item to a user's vault from the web ui, DOES NOT trigger a push notification for an iOS client.

Logs

From my vaultwarden container log (via standard out):


[2024-09-27 20:32:51.788][hyper_util::client::legacy::connect::http][DEBUG] connecting to 151.101.129.91:443
[2024-09-27 20:32:51.795][hyper_util::client::legacy::connect::http][DEBUG] connected to 151.101.129.91:443
[2024-09-27 20:32:51.813][h2::client][DEBUG] binding client connection
[2024-09-27 20:32:51.814][h2::client][DEBUG] client connection bound
[2024-09-27 20:32:51.814][h2::codec::framed_write][DEBUG] send frame=Settings { flags: (0x0), enable_push: 0, initial_window_size: 2097152, max_frame_size: 16384, max_header_list_size: 16384 }
[2024-09-27 20:32:51.814][h2::proto::connection][DEBUG] Connection; peer=Client
[2024-09-27 20:32:51.814][hyper_util::client::legacy::pool][DEBUG] pooling idle connection for ("https", push.bitwarden.com)
[2024-09-27 20:32:51.814][h2::codec::framed_write][DEBUG] send frame=WindowUpdate { stream_id: StreamId(0), size_increment: 5177345 }
[2024-09-27 20:32:51.814][h2::codec::framed_write][DEBUG] send frame=Headers { stream_id: StreamId(1), flags: (0x4: END_HEADERS) }
[2024-09-27 20:32:51.814][h2::codec::framed_write][DEBUG] send frame=Data { stream_id: StreamId(1), flags: (0x1: END_STREAM) }
[2024-09-27 20:32:51.821][h2::codec::framed_read][DEBUG] received frame=Settings { flags: (0x0), max_concurrent_streams: 100 }
[2024-09-27 20:32:51.821][h2::codec::framed_write][DEBUG] send frame=Settings { flags: (0x1: ACK) }
[2024-09-27 20:32:51.821][h2::codec::framed_read][DEBUG] received frame=WindowUpdate { stream_id: StreamId(0), size_increment: 16711681 }
[2024-09-27 20:32:51.821][h2::codec::framed_read][DEBUG] received frame=Settings { flags: (0x1: ACK) }
[2024-09-27 20:32:51.821][h2::proto::settings][DEBUG] received settings ACK; applying Settings { flags: (0x0), enable_push: 0, initial_window_size: 2097152, max_frame_size: 16384, max_header_list_size: 16384 }
[2024-09-27 20:32:51.845][h2::codec::framed_read][DEBUG] received frame=Headers { stream_id: StreamId(1), flags: (0x5: END_HEADERS | END_STREAM) }
[2024-09-27 20:32:51.846][response][INFO] (put_cipher) PUT /api/ciphers/<uuid> => 200 OK
[2024-09-27 20:32:52.130][request][INFO] GET /api/ciphers/d8b0da69-0dc7-4f6b-8678-659a1f4c3b35
[2024-09-27 20:32:52.130][response][INFO] (get_cipher) GET /api/ciphers/<uuid> => 200 OK
[2024-09-27 20:32:52.152][request][INFO] GET /api/config/
[2024-09-27 20:32:52.152][response][INFO] (config) GET /api/config => 200 OK

Screenshots or Videos

No response

Additional Context

Automatic sync works well between web ui clients, indicating the websocket connection works for connected clients.
Automatic sync works well for the droid app, indicating that push notifications are successfully conveyed to bitwarden's push brokering service.
However, no push notifications are received (or acted on) by the Bitwarden iOS app instance.
Immediately following a failed push (iOS app not updating with changes made to user vault from android or web), I was able to successfully exchange text iMessages between the iOS device under test and another iphone, indicating that the iOS device under test has a viable client websocket connection to the APNS gateway.

As well. I'm seeing the same failing Bitwarden push update for the iOS device under test, while on both Wifi and cell service networks. While the manual sync (of the iOS app) works as expected from both networks.

Also. I have renewed the installation id and key (needed for push), deleted the user, and deleted and reinstalled the Bitwarden iOS app... several times now, while reading through every closed and open GH issue about push and iOS problems.
I've even torn down everything, and stood up each piece (container, client, and user) from new.
As well. tried the deauth/delete/recreate method that I found in a similar issue. But, that does NOT resolve the iOS push problem, either.

After reading all the open and closed issues about push notification problems on iOS, and trying what each has, I still cannot get iOS push notifications to work.
But, Android push and web-ui sync (via websocket) both work fine through each iteration.

Any ideas?

Thanks,

Lee

@LeeWhite187 LeeWhite187 added the bug Something isn't working label Sep 27, 2024
@LeeWhite187
Copy link
Author

btw. Let me know if there's any effort underway to create a VaultWarden-specific IOS/droid app. I'd be inclined to help.

@LeeWhite187
Copy link
Author

And in case it's asked, I did answer both popups to allow push notifications, on the iOS device, each time I installed the app to test notifications.

@BlackDex
Copy link
Collaborator

There are several Bitwarden compatibel apps already. I do not think this project has the time to also take an effort on that part.

@Fillup99999
Copy link

Vaultwarden Support String

Your environment (Generated via diagnostics page)

  • Vaultwarden version: v1.32.0
  • Web-vault version: v2024.6.2b
  • OS/Arch: linux/x86_64
  • Running within a container: true (Base: Debian)
  • Environment settings overridden: true
  • Uses a reverse proxy: true
  • IP Header check: true (X-Real-IP)
  • Internet access: true
  • Internet access via a proxy: false
  • DNS Check: true
  • Browser/Server Time Check: true
  • Server/NTP Time Check: true
  • Domain Configuration Check: true
  • HTTPS Check: true
  • Database type: SQLite
  • Database version: 3.46.0
  • Clients used:
  • Reverse proxy and version:
  • Other relevant information:

Config (Generated via diagnostics page)

Show Running Config

Vaultwarden Build Version

1.32.0

Deployment method

Official Container Image

Custom deployment method

self-hosted vaultwarden Running behind an nginx proxy, following the several examples in the guide, with websocket (web ui sync) working well for connected clients.

Reverse Proxy

nginx/1.18.0 (Ubuntu)

Host/Server Operating System

Linux

Operating System Version

Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-72-generic x86_64)

Clients

iOS

Client Version

Bitwarden app version: 2024.9.2, on iOS 16.1.1

Steps To Reproduce

  1. Log into user account on: web ui, android, and iOS.
  2. From the web ui, create a new item in the user's vault.
  3. From the android app, verify the new item appears in the vault (via droid push).
  4. From the iOS app, verify the new item FAILS to appear in the vault (via APNS).
  5. From the iOS app, perform a 'Sync Now' via: Settings/Other/Sync Now.
  6. From the iOS app, verify the new item now appears in the vault (via excplicit web sync call).

Expected Result

Adding a new item to a user's vault from the web ui, triggers a push notification for a droid client. Adding a new item to a user's vault from the web ui, triggers a push notification for an iOS client.

Actual Result

Adding a new item to a user's vault from the web ui, triggers a push notification for a droid client. Adding a new item to a user's vault from the web ui, DOES NOT trigger a push notification for an iOS client.

Logs

From my vaultwarden container log (via standard out):


[2024-09-27 20:32:51.788][hyper_util::client::legacy::connect::http][DEBUG] connecting to 151.101.129.91:443
[2024-09-27 20:32:51.795][hyper_util::client::legacy::connect::http][DEBUG] connected to 151.101.129.91:443
[2024-09-27 20:32:51.813][h2::client][DEBUG] binding client connection
[2024-09-27 20:32:51.814][h2::client][DEBUG] client connection bound
[2024-09-27 20:32:51.814][h2::codec::framed_write][DEBUG] send frame=Settings { flags: (0x0), enable_push: 0, initial_window_size: 2097152, max_frame_size: 16384, max_header_list_size: 16384 }
[2024-09-27 20:32:51.814][h2::proto::connection][DEBUG] Connection; peer=Client
[2024-09-27 20:32:51.814][hyper_util::client::legacy::pool][DEBUG] pooling idle connection for ("https", push.bitwarden.com)
[2024-09-27 20:32:51.814][h2::codec::framed_write][DEBUG] send frame=WindowUpdate { stream_id: StreamId(0), size_increment: 5177345 }
[2024-09-27 20:32:51.814][h2::codec::framed_write][DEBUG] send frame=Headers { stream_id: StreamId(1), flags: (0x4: END_HEADERS) }
[2024-09-27 20:32:51.814][h2::codec::framed_write][DEBUG] send frame=Data { stream_id: StreamId(1), flags: (0x1: END_STREAM) }
[2024-09-27 20:32:51.821][h2::codec::framed_read][DEBUG] received frame=Settings { flags: (0x0), max_concurrent_streams: 100 }
[2024-09-27 20:32:51.821][h2::codec::framed_write][DEBUG] send frame=Settings { flags: (0x1: ACK) }
[2024-09-27 20:32:51.821][h2::codec::framed_read][DEBUG] received frame=WindowUpdate { stream_id: StreamId(0), size_increment: 16711681 }
[2024-09-27 20:32:51.821][h2::codec::framed_read][DEBUG] received frame=Settings { flags: (0x1: ACK) }
[2024-09-27 20:32:51.821][h2::proto::settings][DEBUG] received settings ACK; applying Settings { flags: (0x0), enable_push: 0, initial_window_size: 2097152, max_frame_size: 16384, max_header_list_size: 16384 }
[2024-09-27 20:32:51.845][h2::codec::framed_read][DEBUG] received frame=Headers { stream_id: StreamId(1), flags: (0x5: END_HEADERS | END_STREAM) }
[2024-09-27 20:32:51.846][response][INFO] (put_cipher) PUT /api/ciphers/<uuid> => 200 OK
[2024-09-27 20:32:52.130][request][INFO] GET /api/ciphers/d8b0da69-0dc7-4f6b-8678-659a1f4c3b35
[2024-09-27 20:32:52.130][response][INFO] (get_cipher) GET /api/ciphers/<uuid> => 200 OK
[2024-09-27 20:32:52.152][request][INFO] GET /api/config/
[2024-09-27 20:32:52.152][response][INFO] (config) GET /api/config => 200 OK

Screenshots or Videos

No response

Additional Context

Automatic sync works well between web ui clients, indicating the websocket connection works for connected clients. Automatic sync works well for the droid app, indicating that push notifications are successfully conveyed to bitwarden's push brokering service. However, no push notifications are received (or acted on) by the Bitwarden iOS app instance. Immediately following a failed push (iOS app not updating with changes made to user vault from android or web), I was able to successfully exchange text iMessages between the iOS device under test and another iphone, indicating that the iOS device under test has a viable client websocket connection to the APNS gateway.

As well. I'm seeing the same failing Bitwarden push update for the iOS device under test, while on both Wifi and cell service networks. While the manual sync (of the iOS app) works as expected from both networks.

Also. I have renewed the installation id and key (needed for push), deleted the user, and deleted and reinstalled the Bitwarden iOS app... several times now, while reading through every closed and open GH issue about push and iOS problems. I've even torn down everything, and stood up each piece (container, client, and user) from new. As well. tried the deauth/delete/recreate method that I found in a similar issue. But, that does NOT resolve the iOS push problem, either.

After reading all the open and closed issues about push notification problems on iOS, and trying what each has, I still cannot get iOS push notifications to work. But, Android push and web-ui sync (via websocket) both work fine through each iteration.

Any ideas?

Thanks,

Lee

@LeeWhite187 don't dox yourself, I'm hoping you replaced that IP with a fake one.

@BlackDex
Copy link
Collaborator

BlackDex commented Oct 1, 2024

As this is not a Vaultwarden specific issue, but more a Bitwarden issue with the new clients I'm going to move this to discussions.

Repository owner locked and limited conversation to collaborators Oct 1, 2024
@BlackDex BlackDex converted this issue into discussion #5014 Oct 1, 2024
BlackDex added a commit to BlackDex/vaultwarden that referenced this issue Oct 13, 2024
It seems the iOS clients are not able to handle the `type` key within the `fields` array when they are of the type string.
All other clients seem to handle this just fine though.

This PR fixes this by validating it is a number, if this is not the case, try to convert the string to a number, or return the default of `1`.
`1` is used as this is the type `hidden` and should prevent accidental data disclosure.

Fixes dani-garcia#5069

Possibly Fixes dani-garcia#5016
Possibly Fixes dani-garcia#5002

Signed-off-by: BlackDex <black.dex@gmail.com>
dani-garcia pushed a commit that referenced this issue Oct 13, 2024
It seems the iOS clients are not able to handle the `type` key within the `fields` array when they are of the type string.
All other clients seem to handle this just fine though.

This PR fixes this by validating it is a number, if this is not the case, try to convert the string to a number, or return the default of `1`.
`1` is used as this is the type `hidden` and should prevent accidental data disclosure.

Fixes #5069

Possibly Fixes #5016
Possibly Fixes #5002

Signed-off-by: BlackDex <black.dex@gmail.com>

This issue was moved to a discussion.

You can continue the conversation there. Go to discussion →

Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants